質問: sshを介してバッチモードでコマンドを実行する方法 ssh経由でバッチモードでコマンドを実行するにはどうすればよいですか?つまり、sshコマンドのsftp -b <filename> <hostname>に相当するものは何ですか?sshを介して接続している一連のホストで実行したい一連のコマンドがあります。 sftpを介して、コマンドをファイルfilenameに保存し、ホストに接続して、前述のコマンドを使用してコマンドを実行します。sshを介してそのようなことは可能ですか?
回答: arcegeによるスクリプト の別のオプションは、bash関数です。_sshbatch() { # expect at least 2 parameters, if less are provided print help if [[ ${#@} -lt 2 ]]; then printf 'usage: sshbatch [user@]host... input_file\n' else while read -r -u "$fd" host; do # check if the last parameter is a readable file, else print error and exit [[ -r ${@:(-1)} ]] || { printf "the file ${@:(-1)} is not readable!\n"; break; } # run remote bash from the file given in the last parameter ssh -o batchmode=yes "$host" bash -s < "${@:(-1)}" # read host list from 1st to next to last parameters done {fd}< <(printf '%s\n' "${@:1:${#@}-1}") fi } _sshの_-t_オプションは、すべてのケースで機能するわけではないため、使用しません。このスクリプトは、位置パラメーター配列_$@_でパラメーター拡張を使用します。 "${@:(-1)}"は、最後のパラメーターに展開します(文字通り、最初から最後まで) _"${#@}"_は定位置パラメーターの数に展開されます _"${@:1:${#@}-1}"_は、最初から最後から最後まですべてのパラメーターのリストに展開します(文字通りパラメーターの数から1を引いた数)。