質問: リモートマシンでローカルスクリプトを実行して引数を含めるにはどうすればよいですか? ローカルで実行したときに正常に実行されるスクリプトを作成しました。./sysmole -time aug 18 18 引数"-time"、"aug"、"18"、および"18"が正常に渡されましたスクリプトに進みます。現在、このスクリプトはリモートマシンで実行されるように設計されていますが、ローカルマシンのローカルディレクトリから実行されます。例:ssh root@remoteserver "bash -s" < /var/www/html/ops1/sysmole それもうまくいきます。しかし、前述の引数(-time aug 18 18)を含めようとすると、問題が発生します。次に例を示します。ssh root@remoteserver "bash -s" < /var/www/html/ops1/sysmole -time aug 18 18 このスクリプトを実行すると、次のエラーが発生します。bash: cannot set terminal process group (-1): invalid argument bash: no job control in this shell 私が間違っていることを教えてください、これは非常にイライラします。
回答: あなたはあなたの例にかなり近かった。これらのような引数を指定して使用すると、問題なく動作します。サンプルスクリプト:$ more ex.bash #!/bin/bash echo $1 $2 動作する例:$ ssh servera "bash -s" < ./ex.bash "hi" "bye" hi bye ただし、次のタイプの引数では失敗します。$ ssh servera "bash -s" < ./ex.bash "--time" "bye" bash: --: invalid option ... どうしたの?発生している問題は、引数、-time、またはこの例では--timeがbash -sへのスイッチとして解釈されていることです。 --引数を使用して、残りのコマンドライン引数のいずれかを取得しないようにすると、bashをパシフィック化できます。このような:$ ssh root@remoteserver "bash -s" -- < /var/www/html/ops1/sysmole -time aug 18 18 例#1:$ ssh servera "bash -s" -- < ./ex.bash "-time" "bye" -time bye #2:$ ssh servera "bash -s" -- < ./ex.bash "--time" "bye" --time bye #3:$ ssh servera "bash -s" -- < ./ex.bash --time "bye" --time bye #4:$ ssh < ./ex.bash servera "bash -s -- --time bye" --time bye 注: sshはとにかく引数を連結してリモートシェルを呼び出すため、コマンドラインでリダイレクトが表示される場所に違いはないことを明確にするために、引用はしません例#4:のようにリモートシェルで引用する必要がある場合を除いて、大きな違いがあります。$ ssh < ./ex.bash servera "bash -s -- '<--time bye>' '<end>'" <--time bye> <end>