значении времени команды даты, правильно определяемом в псевдониме bash

Я пытаюсь настроить способ, чтобы я просто набирал «newjournal», а новая запись журнала со специальной строкой year-month-date-12hourclocktime.txt создается в подкаталоге «year» в моем папка журналов в «документах», внутри домашней папки.

Я настроил его как псевдоним, используя следующее:

alias newjournal='nano /home/username/documents/journals/'$(date +%Y)'/'$(date +%F-%k%M).txt''

Таким образом, вложенная папка года правильно решает и, похоже, делает первую половину команды date.

Проблема: по какой-то причине, когда я делаю эту команду, значение времени (% k) разрешается несколько минут назад ... или, может быть, последнее время nano запускало это имя файла, может быть, это называется старым буфером? Когда я выхожу из файла, он делает правильный файл, затем я сохраняю, подожду несколько минут и повторю попытку, и он редактирует старый файл вместо создания нового. Даже если я удалю старый файл, он создаст новый файл со старым именем файла (неправильное время).

Вот скриншот того, что я пытаюсь объяснить. Здесь я создаю новый журнал, сохраняя nano в течение секунды или двух из команды, печатаю правильную дату / время, перечислим созданный файл. Обратите внимание на неправильное время имени файла (1249, как указано в 13:11):

В любом случае, это может быть что-то простое, но я пробовал разные методы в псевдониме как положить двойные кавычки вокруг всего этого и убежать должным образом, одинарные кавычки, экранирование и интервал и т. д.

Спасибо за чтение / помощь. Сервер Ubuntu 16.04.

2
задан 16 October 2017 в 20:49

3 ответа

Команды date оцениваются во время объявления псевдонима. Я покажу вам, что я имею в виду с псевдонимом примера t:

$ alias t="echo \"$(date +%k%M)\""
$ alias t
alias t='echo "1357"'

Вы можете исправить это, используя одинарные кавычки вокруг определения псевдонима:

$ alias t='echo "$(date +%k%M)"'
$ alias t
alias t='echo "$(date +%k%M)"'

Дополнительная информация, см. Различие между одиночными и двойными кавычками в Bash

Или, если команде не нужно быть псевдонимом оболочки, используйте вместо нее функцию:

$ function t { echo "$(date +%k%M)"; }
$ declare -f t
t () 
{ 
    echo "$(date +%k%M)"
}

Обновить, за последнее редактирование

$ alias t='echo '$(date +%k%M)''
$ alias t
alias t='echo 1400'

Подумайте об этом определении псевдонимов как о трех строках:

Одна строка с одной кавычкой: 'echo ' Одна строка без кавычек: $(date +%k%M) Один одиночный кавычек string: ''
4
ответ дан 22 May 2018 в 17:29
  • 1
    Спасибо, что исправил это! Я был близок ... просто смутился насчет процесса цитирования в псевдониме. Нужно было дважды указывать команды внутри одиночного кавычек, а не одиночные кавычки внутри одиночного кавычек. Ваш ответ и статья были очень полезными. – YMGenesis 16 October 2017 в 21:01

Команды date оцениваются во время объявления псевдонима. Я покажу вам, что я имею в виду с псевдонимом примера t:

$ alias t="echo \"$(date +%k%M)\"" $ alias t alias t='echo "1357"'

Вы можете исправить это, используя одинарные кавычки вокруг определения псевдонима:

$ alias t='echo "$(date +%k%M)"' $ alias t alias t='echo "$(date +%k%M)"'

Дополнительная информация, см. Различие между одиночными и двойными кавычками в Bash

Или, если команде не нужно быть псевдонимом оболочки, используйте вместо нее функцию:

$ function t { echo "$(date +%k%M)"; } $ declare -f t t () { echo "$(date +%k%M)" }

Обновить, за последнее редактирование

$ alias t='echo '$(date +%k%M)'' $ alias t alias t='echo 1400'

Подумайте об этом определении псевдонимов как о трех строках:

Одна строка с одной кавычкой: 'echo ' Одна строка без кавычек: $(date +%k%M) Один одиночный кавычек string: ''
4
ответ дан 18 July 2018 в 05:12

Команды date оцениваются во время объявления псевдонима. Я покажу вам, что я имею в виду с псевдонимом примера t:

$ alias t="echo \"$(date +%k%M)\"" $ alias t alias t='echo "1357"'

Вы можете исправить это, используя одинарные кавычки вокруг определения псевдонима:

$ alias t='echo "$(date +%k%M)"' $ alias t alias t='echo "$(date +%k%M)"'

Дополнительная информация, см. Различие между одиночными и двойными кавычками в Bash

Или, если команде не нужно быть псевдонимом оболочки, используйте вместо нее функцию:

$ function t { echo "$(date +%k%M)"; } $ declare -f t t () { echo "$(date +%k%M)" }

Обновить, за последнее редактирование

$ alias t='echo '$(date +%k%M)'' $ alias t alias t='echo 1400'

Подумайте об этом определении псевдонимов как о трех строках:

Одна строка с одной кавычкой: 'echo ' Одна строка без кавычек: $(date +%k%M) Один одиночный кавычек string: ''
4
ответ дан 24 July 2018 в 18:16

Другие вопросы по тегам:

Похожие вопросы: