나는 다음을 수행하려고합니다 :
- 키보드 단축키(Ctrl+Shift+E)에서 그놈 터미널을 엽니다.
- 터미널에서 명령을 실행합니다. Concreness의 경우 명령은 입니다
gio open $(fzf)
. 이 명령은 대화형이며 외부 프로그램(예: evince)을 시작합니다. - 외부 프로그램이 시작되면 외부 프로그램을 닫지 않고 터미널을 닫습니다.
위의 2단계에서 관심 있는 명령은 다음과 같습니다 gio open $(fzf)
. fuzzy finder를 사용하여 파일을 선택한 다음 fzf
명령을 실행하면 gio open
gnome의 기본 프로그램으로 해당 파일이 열립니다.
위의 세 단계를 하나씩 수행할 수 있습니다.
- 설정에서 키보드 단축키를 다음과 같이 바인딩할 수 있습니다
gnome-terminal
. 예상대로 터미널이 열립니다. - 그런 다음 새로 열린 터미널에 my 명령을 입력합니다
gio open $(fzf)
. 에서 pdf 파일을 선택하면fzf
선택한 파일과 함께 evince가 열립니다. - Ctrl+D를 눌러 터미널을 닫을 수 있습니다. 이렇게 하면~ 아니다증거를 닫습니다. 이는 의도된 동작입니다.
이 세 단계를 수동으로 수행하는 것이 효과적입니다.
내 목표는 위의 작업을 자동화하는 것입니다.다음과 같이 작동해야 합니다. 키보드 단축키 Ctrl+Shit+E(또는 기타)를 입력하면 그놈 터미널이 열리고 명령이 gio open $(fzf)
실행됩니다. 대화형 명령이 완료되자마자(evince와 같은 외부 프로그램 열기) 터미널은 evince를 닫지 않고 자동으로 닫혀야 합니다.
내가 시도한 것.
- 명령으로 키보드 단축키를 추가하면
gnome-terminal -- bash -c "gio open $(fzf)"
작동하지 않습니다. 키 조합을 눌러도 아무 일도 일어나지 않습니다. gio open $(fzf)$
.bashrc 끝에 명령을 추가하면 해당 명령이 포함된 키보드 단축키가gnome-terminal
터미널을 열고 명령이 실행됩니다. PDF 파일을 선택하자마자 선택한 파일과 함께 evince가 열립니다(예!!!). 그러나 Ctrl+D를 누르면 터미널이 닫히고 evince도 닫힙니다(아마도 evince가 하위 프로세스이기 때문일까요?).gio open $(fzf)$ && exit
.bashrc 끝에 명령을 추가하면 해당 명령이 포함된 키보드 단축키gnome-terminal
가 터미널을 열고 명령이 실행되지만 파일을 선택하자마자 터미널은 evince를 열지 않고 닫힙니다(evince가 시작되어 즉시 폐쇄되므로 알 수 없습니다).
.bashrc를 가지고 노는 것은 대부분 테스트 목적으로 이루어졌기 때문에 .bashrc를 오염시키는 것을 피하고 싶습니다.
답변1
하지만 Ctrl+D를 누르면 터미널이 닫히고 evince도 닫힙니다(아마도 evince가 하위 프로세스이기 때문일까요?).
예, 그렇습니다. 하위 프로세스이므로 이 프로세스를 "분리"하여 실행해야 합니다. 그런 다음 기본 프로세스(귀하의 경우 터미널)를 종료할 수 있습니다.
분리된 프로세스를 실행하는 방법에 대한 자세한 답변은 다음과 같습니다.
https://superuser.com/questions/178587/how-do-i-detach-a-process-from-terminal-entirely
또 다른 방법으로 다음 단축키를 사용할 수 있습니다.
bash -c "some_command" > /dev/null &2>&1
이 경우 터미널 창이 전혀 표시되지 않으며 .bashrc 파일에 아무것도 추가할 필요가 없습니다.
답변2
똑같은 일이 나를 괴롭혔으므로 이 오래된 질문에 대답하겠습니다. 나는 그것을 발견했고 xdg-open
이런 gio open
종류의 스크립트에 문제가 있으며 gnome-terminal에도 문제가 있음을 발견했습니다. 예를 들어 xdg-open은 gedit를 열어 텍스트 파일을 편집할 수 있지만 PDF를 볼 수는 없습니다. 그래서 다음 스크립트를 xterm -e
. 이렇게 하면 홈 디렉터리에 nohup.out 파일이 남게 됩니다. 이것이 귀찮다면 stdout을 리디렉션할 수 있습니다.
#!/bin/bash
file="$(fzf)"
[ - n "$file" ] || exit 1
end="${file##*.}"
case $end in
pdf | djvu | ps )
exec nohup evince "$file"
;;
* )
exec nohup xdg-open "$file"
;;
esac