gnome-terminal 명령에 변수를 전달하는 방법

gnome-terminal 명령에 변수를 전달하는 방법

--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$3sh$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오류가 해결됩니다.

오류 감지를 용이하게 하기 위해 아래 예에서는 echonot 을 사용합니다.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"

관련 정보