ローカルで実行すると正しく動作するスクリプトを作成しました。
./sysMole -time Aug 18 18
議論「-時間」、「八月」、「18」と「18」正常にスクリプトに渡されました。
これで、スクリプトはリモートシステムで実行されますが、ローカルシステムのローカルディレクトリで実行するように設計されています。例:
ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole
これも素晴らしい作品です。しかし、上記の主張を含めようとすると問題が発生します。(-時間2018年8月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
何が間違っているのか教えてください。とても残念です。
ベストアンサー1
あなたの例は非常に近いです。これらのパラメータと組み合わせて使用すると、非常にうまく機能します。
スクリプト例:
$ 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
#サム:
$ 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>