--command
변수를 사용하여 arg 을(를) 구성하려고 합니다 gnome-terminal
.
내 쉘 스크립트는 다음과 같습니다.
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e 'sh -c "while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done"'
하지만 이 스크립트를 실행하면 새 터미널이 열리지만 이러한 변수를 인식하지 못하고 sys.argv = ['acra.py', '0']
Python 스크립트로만 수신하므로 cmd가 다음과 같이 실행되는 것 같습니다.
python acra.py 0
그렇다면 이 경우 변수를 어떻게 사용할 수 있습니까?
답변1
gnome-terminal
다음과 같이 동작한다고 가정합니다 xterm
.
gnome-terminal -e sh -c 'some commands here' sh "$variable1" "$variable2" "etc."
명령줄 끝에 있는 문자열은 , 등 의 형식 sh -c
으로 스크립트 에 제공됩니다 $1
. 스크립트의 첫 번째 인수 문자열은 셸에 의해 배치되고 오류 메시지에 사용됩니다.$2
$3
sh
$0
귀하의 경우:
#!/bin/sh
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e sh -c '
while true; do
python acra.py "$1" "$2" 0 "$3"
sleep 600
done' sh "$versionCode" "$buildId" "$daily"
이는 acra.py
현재 작업 디렉터리에서 스크립트를 사용할 수 있다고 가정합니다.
답변2
선행은 이루기가 어렵다 답변오류가 발생합니다.
-x
옵션 대신 옵션을 사용하면 -e
오류가 해결됩니다.
오류 감지를 용이하게 하기 위해 아래 예에서는 echo
not 을 사용합니다.python
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e sh -c \
'echo "$1" "$2" 0 "$3"; sleep 60' \
sh "$versionCode" "$buildId" "$daily"
결과 :
Failed to parse arguments: Unknown option -c
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c \
'echo "$1" "$2" 0 "$3"; sleep 60' \
sh "$versionCode" "$buildId" "$daily"
새 터미널 창을 열고 새 창에 다음 결과를 인쇄합니다.123456 aa-bb-cc 0 daily
gnome-terminal
매뉴얼 페이지 에서 :-e, --command=문자열
터미널 내에서 이 옵션에 대한 인수를 실행합니다.
-x, --실행
터미널 내에서 나머지 명령줄을 실행합니다.
정답은선행은 이루기가 어렵다방법:
#!/bin/sh
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c '
while true; do
python acra.py "$1" "$2" 0 "$3"
sleep 600
done' sh "$versionCode" "$buildId" "$daily"
귀하의 답변을 바탕으로 (엔호크스 바이패스) 예:
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -e "sh -c \"while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done\""
또는
buildId="aa-bb-cc"
versionCode="123456"
daily="daily"
gnome-terminal -x sh -c "while true; do
python acra.py $versionCode $buildId 0 $daily
sleep 600 # 10 mins
done"