Bash
執行傳遞給 st(簡單終端)的 -e 標誌的分號分隔的命令
注意:
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"
僅使用一個命令作為
-e
st 的選項,但我需要在 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
啟動一個sh
shell,該 shell 執行一個簡短的 shell 腳本,其中包含您的命令。