- 일하다:
vsim
,sh -c vsim
- 작동 안함:
echo "vsim" | sh
,echo "vsim" | xargs -I {} sh -c "{}"
vsim
ModelSim( ) 을 실행하고 싶습니다 .dmenu
, 이는 를 사용하여 트리거됩니다 xbindkeys
.
세부 사항
vsim
에 설치된 ModelSim의 실행 파일입니다 /opt/altera/modelsim_ase/bin
.
직접 실행해 보니 잘 되더군요. 하지만 실행하면 xargs
(예: dmenu에서) 전혀 작동하지 않습니다. 스크립트가 자체적으로 시작되지만 아마도 잘못된 디렉토리나 다른 곳에 있을 수 있으므로 무엇이 잘못되고 있는지 실제로 알 수 없습니다.
내 경로(명확성을 위해 줄바꿈을 추가했습니다):
[ondra@x201 ~]$ echo $PATH
/usr/local/sbin:
/usr/local/bin:
/usr/bin:
/usr/lib/jvm/default/bin:
/usr/bin/site_perl:
/usr/bin/vendor_perl:
/usr/bin/core_perl:
/opt/altera/quartus/bin:
/opt/altera/modelsim_ase/bin:
/home/ondra/bin:
/home/ondra/.gem/ruby/2.1.0/bin:
/opt/altera/University_Program/Monitor_Program/bin/bin
어디 vsim
?
[ondra@x201 ~]$ which vsim
/opt/altera/modelsim_ase/bin/vsim
실행하세요 xargs
:
[ondra@x201 ~]$ echo "vsim" | xargs -I {} sh -c '{} &'
[ondra@x201 ~]$ Reading /opt/altera/modelsim_ase/tcl/vsim/pref.tcl
# 10.1d
#
# <EOF>
^C
직접 실행:
[ondra@x201 ~]$ vsim
Reading /opt/altera/modelsim_ase/tcl/vsim/pref.tcl
# --- and modelsim starts fine now ---
어떤 아이디어라도 환영합니다.
답변1
실험에 따르면 프로그램은 vsim
표준 입력이 터미널에 연결될 것으로 예상합니다. 그렇지 않은 경우 유용한 작업을 수행하지 않거나(입력을 기다리고 있지만 아무것도 수신하지 않기 때문에) 종료됩니다.
$ vsim $ sh -c vsim
이는 일반적으로 포그라운드의 터미널에서 명령을 실행합니다. 이 명령은 터미널에서 입력을 읽을 수 있습니다.
$ echo "vsim" | sh $ echo "vsim" | xargs -I {} sh -c "{}"
두 경우 모두 표준 입력은 vsim
명령의 파이프에 연결됩니다 echo
. 명령이 중요하다면 vsim
터미널이 아닌 파이프를 입력으로 처리합니다. 파일의 끝이 표시됩니다.
$ echo "vsim" | xargs -I {} sh -c '{} &'
여기서는 vsim
입력이 파이프에 연결되어 있을 뿐만 아니라 프로세스가 백그라운드에서 실행 중이므로 터미널에서 전혀 읽을 수 없습니다(그렇게 하려고 하면 포그라운드로 올 때까지 정지됩니다).
vsim
표준 입력이 터미널에 연결되지 않는 파이프 내부에서 실행 하려면 터미널의 입력을 해당 파이프로 리디렉션하세요.
echo "vsim </dev/tty" | sh
dmenu에서 프로그램을 실행하려면 새 터미널 에뮬레이터에서 열어야 할 수도 있습니다. xterm -e vsim
대신 전화해 보세요 vsim
.
나는 vsim에 익숙하지 않습니다. 아마도 그것을 실행하는 다른 방법이 있을 것입니다.