백그라운드에서 실행되는 동안 사용자 입력 받기

백그라운드에서 실행되는 동안 사용자 입력 받기

사용자에게 입력을 요청하고 나중에 일부 처리를 수행하는 스크립트를 작성 중입니다. 원래는 데이터를 가져오는 데 사용했지만 read키보드 단축키를 사용하여 스크립트를 실행할 때(Ubuntu의 키보드 단축키 목록에 항목을 추가했습니다) read나머지 코드를 무시하고 계속 실행하는 것을 발견했습니다.

이와 같이 백그라운드에서 실행되는 스크립트를 사용하여 사용자 입력을 어떻게 읽나요?

답변1

제가 올바르게 이해했다면 터미널 내부가 아닌 GUI 환경에서 직접 스크립트를 실행하고 있는 것입니다.

터미널은 스크립트가 입력을 받을 수 있는 방법을 제공합니다. 메뉴 항목이나 키보드 단축키를 통해 GUI에서 스크립트를 실행하면 스크립트의 입력이 아무 것에도 연결되지 않습니다(이를 "콘텐츠 없음"이라고 함)./dev/null), 따라서 한 줄을 읽으라고 요청하면 read명령은 읽을 내용이 없다고 말합니다(파일 끝).

두 가지 해결 방법이 있습니다. 스크립트 호출 방식을 변경하거나 스크립트를 변경하는 것입니다. 전자는 더 간단하며 때로는 터미널 내에서 스크립트를 실행할 수 있습니다. 후자는 더 복잡하지만 더 유연합니다.

터미널에서 실행할 스크립트를 쉽게 변경할 수 있습니다. 키보드 단축키를 설정하는 대신 /path/to/script원하는 터미널 에뮬레이터에 대한 키보드 단축키를 설정하십시오. 키를 누르면 터미널 창이 나타나고 스크립트가 종료되면 사라집니다.xterm -e /path/to/scriptgnome-terminal -e /path/to/script

또는 표준 입력이 아닌 GUI 창을 통해 입력을 읽도록 스크립트를 변경할 수 있습니다.제니티일반적인 선택입니다(우분투 패키지 제니티 설치 http://bit.ly/software-small). 스크립트 내에서 [ -t 0 ]터미널에서 실행되는지 테스트하는 데 사용할 수 있습니다.

if [ -t 0 ]; then
  echo "What is your favorite color?"
  read -r color
else
  color=$(zenity --entry --text "What is your favorite color?")
fi

관련 정보