[이 게시물은 추가 조사 결과를 추가하고 더 빠르게 요점을 파악하기 위해 원본 기사를 편집했습니다. @ctrl-alt-delor님 덕분에]
이 스크립트를 사용하는 이유:
#!/bin/bash
read -p "Press any key to continue: " key
nohup java -jar /path/to/compiled.jar &
다음 바탕 화면 바로 가기를 두 번 클릭하여 열린 터미널 창에서 호출하면 지정된 Java GUI 응용 프로그램을 성공적으로 시작/표시할 수 없습니다.
[Desktop Entry]
Icon=bash
Exec=bash /path/to/the/above/script.sh
Type=Application
Terminal=true
수동으로 열린 터미널 창에서 수동으로 호출하면 언제 예상대로 작동합니까?
놀랍게도, 명령을 추가하여 스크립트를 수정하면 sleep 0
다음과 같습니다.
#!/bin/bash
read -p "Press any key to continue: " key
nohup java -jar /path/to/compiled.jar &
sleep 0
그러면 어떻게 호출되든 예상대로 작동할 것입니다.
이 기사에 대한 내 질문은 다음과 같습니다.왜 수면 명령이 필요합니까? 누구든지 이 동작을 설명할 수 있나요?
나는 이 문제가 다음과 관련이 있다고 생각합니다.StackExchange 문제 3886또한 비슷해 보이는 다른 12가지와는 달리 데스크톱 바로가기/실행기에서 스크립트를 호출하는 작업이 전혀 포함되지 않습니다.
스크립트의 명백한 부조리에 대해 걱정하지 마십시오. 이 게시물의 목적을 위해 다른 문제로 인해 주의가 산만해지지 않고 문제를 재현할 수 있는 가장 간단한 예를 제공하기 위해 의도적으로 단순화했습니다.
후속 테스트에서는 java를 호출하는 명령이 stdout 및 sdterr 중 하나 또는 둘 다를 리디렉션하는지 여부에 관계없이 동작이 동일하다는 것을 보여주었습니다. 수동으로 열린 터미널 창에서 스크립트를 수동으로 호출하면 Java 애플리케이션이 항상 표시되지만 스크립트가 호출됨 데스크탑 바로가기에서 시작할 때 Java 애플리케이션이 항상 표시되는 경우 데스크탑 바로가기에서 스크립트를 시작할 때 sleep 명령이 포함된 경우에만 작동합니다.
@Michael Prokopek이 제안한 대로 터미널 환경을 검사한 결과 printenv
각 터미널 창에 고유한 것으로 보이는 GNOME_TERMINAL_SERVICE 및 GNOME_TERMINAL_SCREEN 변수를 제외하고는 어떤 차이점도 나타나지 않았습니다.
그런데 Windows에서 DOS 스크립팅을 사용하면 전혀 드라마틱하지 않고 매력적으로 작동합니다.