Как передать аргументы при вызове скрипта после ssh

$+functions[_expand-aliases]равно 1, если ассоциативный массив functionsсодержит ключ _expand-aliases, и 0 в противном случае. Это описано в руководстве как ${+name}. Под записью ${name}в руководстве поясняется, что фигурные скобки не являются обязательными. Я не думаю, что в руководстве прямо указано, что вы можете использовать имя массива с индексом вместо имени. Руководство по zsh читать нелегко.

Массив functions— это «магический» ассоциативный массив, привязанный к определениям функций. При определении функции к этому массиву добавляется элемент, где ключ — это имя функции, а значение — тело функции, нормализованное. Наоборот,добавление элемента в массив определяет функцию с заданным именем и телом.

unset 'functions[_expand-aliases]'               # unset any previous function
functions[_expand-aliases]=$BUFFER               # define a function whose body is the content of the command line
(($+functions[_expand-aliases])) &&              # if the command line is a syntactically correct function body, then …
BUFFER=${functions[_expand-aliases]#$'\t'} &&    # set the command line to the normalized function definition
CURSOR=$#BUFFER                                  # move the cursor to the end of the command line

Если бы functionsбыл обычным массивом, это не изменило бы значение BUFFER(, за исключением удаления начального табулятора ), и проверка в третьей строке всегда была бы истинной. Но из-за «волшебной» природы functionsвы получаете не то, что вкладываете, а нормализованную версию — в частности, с расширенными псевдонимами. Тест в третьей строке не пройден, если определение функции синтаксически неверно.

-1
23.01.2019, 03:30
2 ответа

Поскольку вы отправляете содержимое скрипта, я предлагаю вам ввести в него аргументы с помощью команды setдля установки позиционных параметров:

ssh -tt "${!SERVER_ADDRESS}" <<END
set -- "arg 1" "arg 2" "arg 3"
$(cat $SCRIPT_PATH)
END
2
28.01.2020, 05:08

То же, что локально;

ssh $SERVER install.sh argument
0
28.01.2020, 05:08

Теги

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