쉘 스크립트를 사용하여 터미널에서 명령의 사용자 순차 실행을 시뮬레이션하는 방법

쉘 스크립트를 사용하여 터미널에서 명령의 사용자 순차 실행을 시뮬레이션하는 방법

나는 다음을 수행하고 싶습니다 :

  1. 터미널을 엽니다.
  2. 대상 스크립트가 있는 디렉터리로 변경합니다.
  3. 대상 스크립트에 대한 입력을 제공하는 텍스트 파일을 엽니다. 사용자가 텍스트 파일을 저장하고 닫을 때까지 기다리거나 기다립니다.
  4. 대상 스크립트를 실행합니다.

위의 작업을 수행하기 위해 다음 스크립트를 작성했습니다.

#!/bin/bash 
echo "hello"
gnome-terminal -x bash -c "cd ~/Scripts;pwd;gedit input.txt;python test.py;exec $SHELL"
echo "good bye"

위의 결과는 다음과 같습니다.

user4@user-pc-4:~/Desktop$ ./DAT_run.sh
hello
good bye

열리는 새 gnome 터미널에 다음 메시지가 표시됩니다.

/home/user4/Scripts
From python script
From python script
From python script
From python script
From python script

위의 의미는 Python 코드를 실행했으며 요구 사항 1, 2, 4가 충족되었다는 것입니다(세 번째 요구 사항 아님). gedit저장하고 닫을 때까지 창을 누르고 있을 수 없습니다.

내가 알고 싶은 것은- 명령문 끝에 작성하여 그러한 내용을 나타내지 않는데 gedit명령이 백그라운드 프로세스로 간주되는 이유는 무엇입니까 ? 내 프로세스가 포그라운드 프로세스로 실행되고 사용자 제어가 필요한지 &어떻게 확인할 수 있나요 ?gedit

여기서 무엇이 잘못될 수 있나요? 저는 쉘 스크립팅을 처음 접했고 여기에 뭔가 빠진 것 같은 느낌이 들었습니다. 위의 모든 요구 사항을 어떻게 충족할 수 있나요?

답변1

의견에서 언급했듯이 gedit 및 기타 그래픽 편집기는 비동기식으로 실행되기 때문에 예상대로 정확하게 실행되지 않을 수 있습니다.

또한 이 질문은 파일을 Python 스크립트에 대한 입력("stdin")으로 사용하려는 인상을 주지만 100% 확신할 수는 없습니다. 이 경우 명령에서 언급한 대로 expect요구 사항의 복잡성에 따라 사용해야 할 수도 있습니다. expect입력 파일은 정적이지만 입력을 동적으로 생성하는 방법을 제공합니다. 어쨌든, 당신이 정적 입력을 원하고 질문에 대한 나의 이해가 정확하다고 가정하고 대답하겠습니다.

이렇게 하려면 파일 내용을 Python의 표준 입력으로 파이프해야 합니다. 다음 스크립트를 사용하여 이를 달성할 수 있습니다( 필요에 맞지 않는 vimas 사용).gedit

#!/bin/bash 
echo "hello"
gnome-terminal -x bash -c "cd ~/Scripts; pwd; vim input.txt; cat input.txt | python test.py; exec $SHELL"
echo "good bye"

추신: "터미널에서 사용자 가장"이 무엇을 의미하는지 오해한 경우 그에 따라 답변을 편집할 수 있도록 알려주시기 바랍니다.

관련 정보