В прошлом я несколько раз искал решение этой проблемы, но так и не нашел полностью удовлетворительного решения. При подключении к ssh ваша интерактивность теряется. Два соединения (scp/ssh )медленнее, и ваш временный файл может остаться без дела. И весь скрипт в командной строке часто заканчивается адом.
Недавно я обнаружил, что размер буфера командной строки обычно довольно велик ('getconf ARG _MAX > 2MB, где я смотрел ). И это заставило меня задуматься о том, как я мог бы использовать это и смягчить проблему побега.
Результат:
ssh -t /bin/bash "<(echo "$(cat my_script | base64 | tr -d '\n')" | base64 --decode)" ...
или используя здесь документ и кошку:
ssh -t /bin/bash $'<(cat<<_ | base64 --decode\n'$(cat my_script | base64)$'\n_\n)' ...
Я расширил эту идею, чтобы создать полностью работающий пример сценария BASH sshx
, который может запускать произвольные сценарии (, а не только BASH ), где аргументы могут быть также локальными входными файлами через ssh. См. здесь .