다음 스크립트가 있다고 가정해 보겠습니다.
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
전달해야 합니다 .$1
bash -c
x-terminal-emulator -e "bash -c 'echo \$1 > ~/text' bash $1"