사용자 입력을 위해 GUI 또는 터미널이 있어야합니다. 사용자가 Nautilus에서 스크립트를 열면 stdin이 없으므로 read가 즉시 반환됩니다. 한 가지 가능한 해결책은 스크립트를 새 터미널을 열고 다음과 같이 자체에서 실행하는 것입니다.
x-terminal-emulator -e $0
x 터미널 에뮬레이터에서는 기본 터미널 에뮬레이터가 호출됩니다. 데비안 & amp; 우분투, 나는 다른 배포판에 대해 모른다.
물론 xterm, konsole 또는 다른 터미널과 같은 특정 터미널을 호출 할 수 있습니다.
$0
는 스크립트의 파일 경로이므로 항상 작동합니다.
또한 터미널을 재귀 적으로 열지 않아야합니다. 이것이 작동 할 수있는 한 가지 방법은 이미 어쨌든 당신이 stdin에서 읽을 수 있는지 확인하는 것입니다.
파일 끝 (end-of-file)이 없으면 읽기 명령의 리턴 코드는 0입니다.
문자가 읽히거나, 읽는 시간이 초과되거나 유효하지 않은 파일
descriptor가 인수로 -u 옵션에 제공됩니다.
따라서 반환 값을 확인하십시오! = 0이면 위와 같은 새 터미널을 열고 그렇지 않으면 그렇지 않습니다.
예:
#!/bin/bash
read -p "Enter first value: " first
# Check return value of last command with $?
if [[ $? != 0 ]]; then
x-terminal-emulator -e $0
else
echo $first
read -p "Enter more: " more
echo $more
fi
만나다 이 질문 프로그램이 끝난 후에도 터미널을 열어 두어야 할 경우.