Вы намекаете, что это скрипт/функция Solaris, но, основываясь на вашем описании, это звучит как что-то другое, возможно, вредоносное в вашей системе. Имя скрипта также было бы полезно.
Если вы используете двойные кавычки при определении псевдонима, расширение параметров происходит во время определения псевдонима.
Например:
$ pwd
/tmp
$ echo $PWD
/tmp
$ alias p="echo $PWD"
$ p
/tmp
$ cd /
$ pwd
/
$ p
/tmp
$ alias p
alias p='echo /tmp'
$
Если вы хотите, чтобы расширение параметров происходило в момент вызова псевдонима, используйте одинарные кавычки при определении псевдонима:
$ alias p='echo $PWD'
$ p
/tmp
$ cd /
$ p
/
$
Конечно, никогда не будет никакой причины для выполнения команды . Я знаю, что вы использовали это просто как пример, но поскольку я видел это так много раз "на природе", я все равно поясню: Это означает, что нужно выполнить команду echo "$(date)"
date
и захватить вывод (убрав все последующие новые строки). Затем передайте этот захваченный вывод в качестве аргумента команде echo
, которая выведет его вместе с одной новой строкой. Здесь нет никаких преимуществ перед непосредственным запуском date
.
Однако у вас здесь другая проблема:
Когда вы задаете псевдоним d='$(date)'
, при вводе d
вы получите буквальный результат ввода $(date)
в командной строке - команда date
будет выполнена, вывод захвачен, зачеркнута новая строка, а затем вывод будет разобран оболочкой как команда (включая разделение слов и расширение глобуса файла).
Поскольку сегодня пятница, первое слово, выводимое date
- "Fri", поэтому оболочка пытается выполнить это как команду.
Если вы хотите увидеть дату при наборе d
, просто используйте:
alias d=date
или
alias d='date'
или
alias d="date"
Неважно, какую форму вы используете, поскольку нет специальных символов, требующих какой-либо формы кавычек.
Давайте определим псевдоним, используя одинарные кавычки:
$ alias d='$(date)'
Теперь давайте извлечем определение псевдонима:
$ alias d
alias d='$(date)'
Обратите внимание, что подстановка команд еще не производилась.
Давайте сделаем то же самое, но на этот раз с двойными кавычками:
$ alias d="$(date)"
$ alias d
alias d='Fri Oct 28 17:01:12 PDT 2016'
Поскольку используются двойные кавычки, подстановка команд была выполнена до того, как был определен псевдоним.
Давайте попробуем выполнить версию с одинарными кавычками:
$ alias d='$(date)'
$ d
bash: Fri: command not found
Версия с одинарными кавычками эквивалентна выполнению:
$ $(date)
bash: Fri: command not found
В обоих случаях подстановка команды выполняется при выполнении команды.
Давайте рассмотрим этот псевдоним, который использует подстановку команд и определяется с помощью одинарных кавычек:
$ alias e='echo $(date)'
$ e
Fri Oct 28 17:05:29 PDT 2016
$ e
Fri Oct 28 17:05:35 PDT 2016
Каждый раз, когда мы запускаем эту команду, дата
вычисляется снова. При использовании одинарных кавычек подстановка команд выполняется при выполнении псевдонима, а не при его определении.
Это происходит ~/.bashrc
? В~/.bashrc
95 # Alias definitions.
96 # You may want to put all your additions into a separate file like
97 # ~/.bash_aliases, instead of adding them here directly.
98 # See /usr/share/doc/bash-doc/examples in the bash-doc package.
и поэтому я использую другой предложенный файл для своих ярлыков:
~/.bash_aliases
Главное избегать одинарных кавычек:
# I use vim but nano or gedit is also fine
vim ~/.bashrc # or vim ~/.bash_aliases
# create your alias:
alias d=''\'date''\'
# or
alias dd="'date'"
# or
alias ddd='"date"'
Затем откройте новый сеанс терминала, и d
выполнит то, что вы хотите.