ローカルで実行したときに正常に実行されるスクリプトを作成しました。
./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>
次のように、コマンドを引用符で囲みます。
ssh myserver "date +\"Date: %Y%m%d %H:%M\";printf \"Uptime: \";uptime;printf \"uname: \";uname -a"
Date: 20200409 20:02
Uptime: 20:02:29 up 66 days, 55 min, 2 users, load average: 0.06, 0.05, 0.08
uname: Linux zltcmtn23aecc1rx7322 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Connection to 105.31.182.217 closed.