bash 스크립트에서 "x-terminal-emulator -e bash -c"로 매개변수를 전달하는 방법은 무엇입니까?

bash 스크립트에서 "x-terminal-emulator -e bash -c"로 매개변수를 전달하는 방법은 무엇입니까?

다음 스크립트가 있다고 가정해 보겠습니다.

x-terminal-emulator -e bash -c 'echo hello > ~/text'

이름을 foo.sh로 지정하고 실행 가능하게 만들었습니다.

이 스크립트를 실행하면 홈 폴더에 "hello"라는 단어가 포함된 텍스트 파일이 생성됩니다.

이제 다음과 같이 수정하면:

x-terminal-emulator -e bash -c 'echo $1 > ~/text'

...다음과 같이 터미널에서 실행합니다.

./foo.sh hello

내 홈 폴더에 내용이 없는 텍스트 파일이 있습니다.

foo.sh는 첫 번째이자 유일한 매개변수($1)로 "hello"를 받습니다. 그렇다면 왜 bash는 그것을 받지 못하는 걸까요? foo.sh에서 bash로 하나 이상의 매개변수를 전달하는 방법이 있나요?

변수 이름에 매개변수를 저장한 후 내보내기를 시도했지만 결과가 변경되지 않았습니다.

답변1

~에서man bash


   -c        If the -c option is present, then commands are read from the
             first  non-option  argument  command_string.   If  there are
             arguments after the command_string, they are assigned to the
             positional parameters, starting with $0.

그래서 당신은 할 수 있습니다

x-terminal-emulator -e bash -c 'echo $0 > ~/text' "$1"

또는 (매개변수의 "일반적인" 번호 지정을 유지하려는 경우)

x-terminal-emulator -e bash -c 'echo $1 > ~/text' _ "$1"

여기서는 _원하는 더미 변수로 대체할 수 있습니다.

답변2

in 은 bash -c 'echo $1 > ~/text'스크립트 가 아닌 프로세스 내에서 확장 $1됩니다 . 원본 문서를 다음 주소로 bash -c전달해야 합니다 .$1bash -c

x-terminal-emulator -e "bash -c 'echo \$1 > ~/text' bash $1"

관련 정보