任意引数処理情報

任意引数処理情報

ローカルで実行すると正しく動作するスクリプトを作成しました。

./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 -sbash引数で終了して残りのコマンドライン引数を取得すると、それを変更できます--

このように:

$ 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>

おすすめ記事