подстановка команд в одинарных кавычках для псевдонима

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

7
08.01.2020, 18:16
3 ответа

Если вы используете двойные кавычки при определении псевдонима, расширение параметров происходит во время определения псевдонима.

Например:

$ 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"

Неважно, какую форму вы используете, поскольку нет специальных символов, требующих какой-либо формы кавычек.

6
27.01.2020, 20:16

Версии с одинарными кавычками и двойными кавычками

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

$ 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

Каждый раз, когда мы запускаем эту команду, дата вычисляется снова. При использовании одинарных кавычек подстановка команд выполняется при выполнении псевдонима, а не при его определении.

5
27.01.2020, 20:16

Это происходит ~/.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выполнит то, что вы хотите.

0
27.01.2020, 20:16

Теги

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