псевдоним bash с аргументами работает в одной среде, а не в другой - PullRequest
0 голосов
/ 13 марта 2019

Я видел много сообщений, указывающих, что псевдонимы оболочки не поддерживают аргументы. В одной среде, CentOS 6.10, Bash 4.1.2, у меня есть это:

alias hist='source ~/scripts/hist "@$"'

(~ / scripts / hist является сценарием оболочки) Это работает. Скрипт точно получает переданные аргументы от псевдонима. В другой среде - RHEL Server 7.5, Bash 4.2.46 с похожим псевдонимом - единственное отличие заключается в явном пути в псевдониме:

alias hist='source /full/path/to/hist "@$"'

Не работает. Когда скрипт запускается, он считает, что получил аргументы вроде: «uid = nnnn (имя пользователя) gid = nnnn (grpname) groups = nnnn (grp)» *

Сценарий абсолютно идентичен в обоих местах. Мне просто интересно, что может быть объяснение.

1 Ответ

2 голосов
/ 13 марта 2019

это не работает должным образом, здесь минимальный пример

alias print_args='printf "<%s>\n" "$@"'

print_args "hello" "world"

может напечатать

<hello>
<world>

, но только если текущие параметры оболочки не установлены (что иногда вернов интерактивной оболочке, но не всегда)

однако после set 1 2 3, например,

set -- 1 2 3
print_args "hello" "world"

печатает

<1>
<2>
<3>
<hello>
<world>

позиционные параметры командной строки находятся рядом с текущими позиционными параметрами.

Принимая во внимание, что следующие (без "$@") правильно передали параметры командной строки

alias print_args='printf "<%s>\n"'
print_args "hello" "world"
...