it-gundan.com

원격 컴퓨터에서 로컬 스크립트를 실행하고 인수를 포함시키는 방법은 무엇입니까?

로컬에서 실행될 때 잘 실행되는 스크립트를 작성했습니다.

./sysMole -time Aug 18 18

"-time", "Aug", "18""18" 인수가 성공적으로 전달되었습니다. 스크립트에.

이제이 스크립트는 원격 시스템에서 실행되도록 설계되었지만 로컬 시스템의 로컬 디렉토리에서 실행됩니다. 예:

ssh [email protected] "bash -s" < /var/www/html/ops1/sysMole

그것은 또한 잘 작동합니다. 그러나 문제는 위에서 언급 한 인수를 포함하려고 할 때 발생합니다 (-time Aug 18 18)

ssh [email protected] "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

내가 뭘 잘못하고 있는지 말해줘.

123
AllenD

당신은 당신의 모범에 아주 가까웠습니다. 이러한 인수와 함께 사용할 때 제대로 작동합니다.

샘플 스크립트 :

$ 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 또는 --timebash -s 로의 전환으로 해석되고 있다는 것입니다. -- 인수를 사용하여 나머지 명령 행 인수를 취하지 않도록 bash을 종료 할 수 있습니다.

이처럼 :

$ ssh [email protected] "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

NOTE :ssh은 어쨌든 인수가 연결된 원격 셸을 호출하기 때문에 명령 줄에서 리디렉션이 나타나는 곳마다 차이가 없음을 분명히하기 위해 인용하지 않습니다. 예를 들어 # 4 : 와 같이 원격 셸에서 인용해야 할 때를 제외하고는 큰 차이를 만듭니다.

$ ssh  < ./ex.bash serverA "bash -s -- '<--time bye>' '<end>'"
<--time bye> <end>
173
slm

다음과 같이 명령을 따옴표로 묶으십시오.

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.
0
Richard