在 Ubuntu 17.10 中透過鍵盤快捷鍵啟動終端,執行互動式命令並退出

在 Ubuntu 17.10 中透過鍵盤快捷鍵啟動終端,執行互動式命令並退出

我正在嘗試執行以下操作:

  1. 從鍵盤快速鍵開啟 gnome 終端,例如 Ctrl+Shift+E。
  2. 在終端機中運行命令。具體來說,命令是gio open $(fzf)。該命令是互動式的並啟動外部程式(例如 evince)。
  3. 一旦外部程式啟動,關閉終端而不關閉外部程式。

我對上面的步驟 2 感興趣的命令是gio open $(fzf):我使用模糊查找器選擇一個文件fzf,然後該命令gio open使用 gnome 的預設程式開啟該文件。

我可以一一執行上面的三個步驟:

  1. 我可以將設定中的鍵盤快捷鍵綁定到gnome-terminal:它按預期打開終端。
  2. 然後我在新開啟的終端機中輸入我的命令gio open $(fzf):如果我從 中選擇一個 pdf 文件fzf,它將使用所選文件開啟 evince。
  3. 我可以輸入 Ctrl+D 來關閉終端機。這樣做會不是密切的證據。這是預期的行為。

手動執行這三個步驟是可行的。

我的目標是將上述工作自動化。它應該按如下方式工作。當我輸入鍵盤快捷鍵 Ctrl+Shit+E(或任何其他快捷鍵)時,應該會打開一個 gnome 終端,並且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 編輯文字文件,但不能開啟 evice 來查看 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

相關內容