На этот вопрос уже есть ответ здесь:
Я выполнил удаленный сценарий Bash bash <( curl -s URL / script.sh | tr -d '\ r')
, который выполняет следующие 3 действия:
aliases.sh
) в текущий реж. source ./aliases.sh
. rss
, предназначенный для перезапуска службы веб-сервера. По какой-то причине выполнение псевдонима сценарием всегда терпит неудачу, но ручное выполнение всегда завершается успешно.
Текущее состояние таково, что псевдоним rss
(и все другие псевдонимы в списке фактически) будет игнорироваться и считаться «несуществующим» при выполнении script.sh
даже хотя их файл aliases.sh
является источником и выполнение rss
и всех других псевдонимов завершается успешно, если я выполняю их вручную (набираю rss
и нажимаю Enter).
Почему это «различение выполнения», когда выполнение псевдонима сценария не выполняется, а выполнение псевдонима вручную завершается успешно?
Я воспроизвел это в нескольких различных средах Ubuntu. Я не могу это объяснить и был бы признателен за ваше мнение.
При выполнении сценария оболочки "b" из сценария оболочки "a", весь набор псевдонимов и переменных в сценарии "b" только хорош для той среды оболочки, они не становятся пасуемыми назад к сценарию оболочки "a".
Псевдонимы сделаны для интерактивного использования. В сценарии можно получить тот же результат (как Вы добираетесь от псевдонима) путем ввода соответствующей команды в сам сценарий.
Если Вы хотите использовать его несколько раз, можно создать функцию и назвать ее в сценарии.
Пример:
alias alidr='sudo lsblk -o model,name,size,fstype,label,mountpoint'
может быть заменен в сценарии удара с
function flidr {
sudo lsblk -o model,name,size,fstype,label,mountpoint $*
}
и это можно назвать в сценарии с
flidr
или показать только указанные диски с параметрами
flidr /dev/sda /dev/sdb