키보드 단축키로 터미널을 실행하고 대화형 명령을 실행한 후 Ubuntu 17.10에서 종료합니다.

키보드 단축키로 터미널을 실행하고 대화형 명령을 실행한 후 Ubuntu 17.10에서 종료합니다.

나는 다음을 수행하려고합니다 :

  1. 키보드 단축키(Ctrl+Shift+E)에서 그놈 터미널을 엽니다.
  2. 터미널에서 명령을 실행합니다. Concreness의 경우 명령은 입니다 gio open $(fzf). 이 명령은 대화형이며 외부 프로그램(예: evince)을 시작합니다.
  3. 외부 프로그램이 시작되면 외부 프로그램을 닫지 않고 터미널을 닫습니다.

위의 2단계에서 관심 있는 명령은 다음과 같습니다 gio open $(fzf). fuzzy finder를 사용하여 파일을 선택한 다음 fzf명령을 실행하면 gio opengnome의 기본 프로그램으로 해당 파일이 열립니다.

위의 세 단계를 하나씩 수행할 수 있습니다.

  1. 설정에서 키보드 단축키를 다음과 같이 바인딩할 수 있습니다 gnome-terminal. 예상대로 터미널이 열립니다.
  2. 그런 다음 새로 열린 터미널에 my 명령을 입력합니다 gio open $(fzf). 에서 pdf 파일을 선택하면 fzf선택한 파일과 함께 evince가 열립니다.
  3. 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

관련 정보