В моем сценарии иногда требуется передать сценарий в SSH, а иногда позволить пользователю взаимодействовать.
Я попробовал этот трюк:
if [ "" != "$SSH_SCRIPT" ] ; then
...
else
SSH_SCRIPT="&0";
fi
А потом:
ssh $SSH_IGNORE_STDIN $SSH_TTY $noKeyCheck -i $AWS_KEY $USER_@$HOST_ "$COMMAND_SSH" <$SSH_SCRIPT;
Что я предположил, будет работать, потому что cat <&0
работает.
Но когда я использую переменную после <
, она работает по-другому - жалуется, что файл &0
не найден. Похоже, <&n
является синтаксической конструкцией. Воспроизводится таким образом:
$ FOO='&0';
$ cat <$FOO
bash: &0: No such file or directory
Есть ли способ параметризации перенаправления по номеру дескриптора файла?
Включение всей команды в bash -c "..."
, вероятно, не очень хорошая идея, потому что все это усложняет.
Выгрузка команды на удаленный сервер и ее запуск также немного излишни.
До сих пор я прибегал к:
if [ "" == "$SSH_SCRIPT" ] ; then
ssh $SSH_IGNORE_STDIN $SSH_TTY $noKeyCheck -i $AWS_KEY $USER_@$HOST_ "$COMMAND_SSH";
else
ssh $SSH_IGNORE_STDIN $SSH_TTY $noKeyCheck -i $AWS_KEY $USER_@$HOST_ "$COMMAND_SSH" <$SSH_SCRIPT;
fi