dmenu에서 vsim 실행 - 터미널에서 직접 호출하는 경우에만 작동합니다.

dmenu에서 vsim 실행 - 터미널에서 직접 호출하는 경우에만 작동합니다.
  • 일하다: vsim,sh -c vsim
  • 작동 안함: echo "vsim" | sh,echo "vsim" | xargs -I {} sh -c "{}"

vsimModelSim( ) 을 실행하고 싶습니다 .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에 익숙하지 않습니다. 아마도 그것을 실행하는 다른 방법이 있을 것입니다.

관련 정보