Bash

執行傳遞給 st(簡單終端)的 -e 標誌的分號分隔的命令

  • August 8, 2018

注意: st是我的問題中終端模擬器的實際名稱 - https://st.suckless.org/


我想創建一個快捷方式,如果按下它,就會彈出 st 並在剪貼板中顯示單詞的翻譯。

我嘗試使用它,但立即退出並給出錯誤:

$ st -e "trans $(xclip -o) -t en; read"`
child finished with error '256'

但同樣適用於xterm預期:

$ xterm -e "trans $(xclip -o) -t en; read"

僅使用一個命令作為-est 的選項,但我需要在 trans 之後執行 read 或類似的操作,這樣終端就不會立即關閉。

這是 st 中的錯誤還是我做錯了什麼?

-e選項是簡單終端中的一種兼容機制。您傳遞的命令和參數,無論是否帶有,都通過簡單的終端分叉直接執行-e,然後在子程序中完全按照給定的命令和參數執行。不涉及 shell,傳遞給的參數完全按原樣發送到目標程序。execvp()st

您已將所有內容都作為一個參數傳遞。如此簡單的終端實際上是在嘗試執行一個按字面意思命名的命令trans $(xclip -o) -t en; read(如果是單引號,或者如果使用雙引號,則無論擴展結果如何修改)。顯然,您沒有命名為的命令。

要使用 shell 命令行——比如這裡有擴展、shell 內置命令和 shell 命令語法——你必須顯式呼叫 shell 來理解它:

st -e sh -c 'trans "$(xclip -o)" -t en; read'

這將st啟動一個shshell,該 shell 執行一個簡短的 shell 腳本,其中包含您的命令。

引用自:https://unix.stackexchange.com/questions/461249