echo.sh라는 간단한 bash 스크립트를 만들었습니다. 문자열을 출력합니다. 실행 가능한지 확인했습니다. 그런 다음 GUI 인터페이스를 통해 "Launch Application" 프로그램에 추가했습니다. 그런데 컴퓨터를 다시 시작해도 터미널에 에코가 나타나지 않아 실행되지 않는 것 같습니다.
내 이해에 따르면 STDOUT은 터미널 파일이므로 스크립트가 실행될 때 자동으로 터미널을 열어서는 안 됩니다. 그러나 터미널에서 직접 스크립트를 실행하면 스크립트가 제대로 작동합니다.
에코 파일
#!/bin/bash
echo "hello this is a bash script talking"
실행 가능하게 만들어라
chmod +x echo.sh
결과
그런데 시스템을 재부팅하면 스크립트가 예상대로 실행되지 않고 터미널에 에코 메시지가 나타나지 않습니다. 이유를 잘 모르겠습니다. 요점을 완전히 놓쳤을 수 있습니다. 그렇다면 알려주십시오.
참고로, "Startup Application" 프로그램에도 있는 "cleanup.sh" 스크립트와 같은 다른 모든 bash 스크립트는 작동합니다.
고치려고 노력하다
STDOUT을 터미널 파일 /dev/tty로 리디렉션하려고 했습니다. 그러나 이것은 작동하지 않는 것 같습니다.
#!/bin/bash
echo "hello this is a bash script talking" >/dev/tty
또한 문제가 있는 것이 단지 echo 명령인지 확인하기 위해 간단한 rm 명령을 사용하여 bash 스크립트를 테스트했습니다. 그러나 시작 응용 프로그램이나 .bashrc 파일에 추가하면 스크립트와 동일한 디렉터리에 있는 test.txt가 삭제되지 않습니다. 그러나 터미널에서 수동으로 실행하면 작동합니다.
#!/bin/bash
rm ./test.txt
또한 Firefox 명령을 사용하여 Firefox를 여는 것만으로 애플리케이션 자체 실행을 테스트했습니다. 문제없이 작동합니다. 그럼 앱 자체 실행에는 문제가 없는 것 같은데요?
답변1
스크립트는 작동할 수 있지만 스크립트의 STDOUT(출력이 전달되는 위치에 관계없이)은 아래와 같이 시작 스크립트 실행과 관련된 운영 체제의 프로세스에 연결되어 있습니다. 터미널이지만 커널 프로세스 등에서는 사용자에게 숨겨집니다. 이 메시지가 표시된 터미널을 열려면 아마도 다음과 같이 편집해야 할 것입니다.
#!/bin/bash
gnome-terminal -e 'echo "hello this is a bash script talking"'
(저는 지금 Ubuntu를 사용하고 있지 않기 때문에 이를 테스트할 수 없지만 요점은 이 메시지가 표시되기를 원하는 터미널을 명시적으로 여는 것입니다)
답변2
생성한 자동 시작 파일의 구성 파일을 확인할 수 있습니다.
cat ~/.config/autostart/NAME.desktop
터미널에서 스크립트를 실행하려면
Terminal=true
이 파일에 추가해야 합니다. 달성하려는 목표에 따라 설정할
수도 있습니다 .Hidden=false
답변3
가장 간단한 방법은 아래와 같이 crontab을 사용하는 것입니다.
crontab -e
콘트라브 파일 끝에 스크립트를 추가하세요.
#
@reboot /path-to-your-script/your-script-name.sh
그런 다음 다시 시작하여 변경 사항을 관찰합니다.
답변4
/bin/bash -c
앞에 추가 해야 합니다 .'/path/to/your/script.sh'
/bin/bash -c '/path/to/your/script.sh'
명령 echo
출력은 터미널이 아닌 시스템 로그에 표시됩니다.
journalctl -b
시스템 시작 로그의 출력, 즉 스크립트가 실행될 때의 출력이 표시됩니다.