Я использую файловый менеджер наутилуса и создал файл ~/.bash_aliases
со строкой
alias naut="nautilus $(pwd) >/dev/null 2>&1 & disown;"
Затем я выполняюсь
source ~/.bashrc
Затем, когда я ввожу команду naut
, файловый менеджер не открывается в pwd
каталог, но в каталоге, в котором я в последний раз выполнился source ~/.bashrc
. Который является странным, потому что, когда я создаю псевдоним
alias naut="pwd; nautilus $(pwd) > /dev/null 2>&1 & disown;"
команда naut
всегда возвращает мой фактический рабочий каталог, в то время как вводный наутилус в другом каталоге.
Как это возможно?
man bash
:
Включение символов в двойных кавычках сохраняет литеральное значение всех символов в кавычках, за исключением
$
,`
,\
, и, когда расширение истории включено,!
. Символы$
и`
сохраните их особое значение в двойных кавычках. Обратная косая черта сохраняет свое особое значение только при сопровождении одним из следующих символов:$
,`
,"
,\
, или <новая строка>. Двойная кавычка может быть заключена в кавычки в двойных кавычках путем предшествования ему с обратной косой чертой. Если включено, расширение истории будет выполнено если!
появления в двойных кавычках оставляют с помощью обратной косой черты. Обратная косая черта, предшествующая!
не удален.
Как следствие, в Вашем определении $(pwd)
расширен, когда псевдоним определяется, не, когда он выполняется. Используйте одинарные кавычки вокруг правой стороны определения псевдонима.
С другой стороны, как Bharadwaj Raju замечает, текущий рабочий каталог всегда .
, так nautilus "$(pwd)"
совпадает с nautilus .
. И Вы, вероятно, хотите doublequotes вокруг $(pwd)
.