[英]fish shell command subsitution in watch command
我正在嘗試在fish shell中使用watch命令。
sudo watch -d "lsof -a -p (pidof myprogram)"
如您所見,此有效的命令替換語法適用於fish。 然而,我得到以下錯誤的watch
,當我運行它。
sh: -c: line 0: syntax error near unexpected token '('
sh: -c: line 0: `lsof -a -p (pidof myprogram)'
如果我將命令更改為sh兼容語法
sudo watch -d "lsof -a -p $(pidof myprogram)"
我收到以下錯誤。
$(...) is not supported. In fish, please use '(pidof)'.
fish: sudo watch -d "lsof -a -p $(pidof myprogram)"
有沒有解決的辦法?
簡而言之:
sudo watch -d "lsof -a -p "(pidof myprogram)
即退出引號並執行命令替換(兩者之間沒有空格,因此將直接附加)。
這里有一個空白,就是您根本不希望拆分命令的輸出-在這里它將在換行符上進行拆分,並生成多個令牌,例如"lsof -a -p "line1 "lsof -a -p"line2
。 在這種情況下,這不應該成為問題,但是如果需要,則應使用string split0
這樣
sudo watch -d "lsof -a -p "(pidof myprogram | string split0)
這只會分割成NULL字節,這在命令行參數中是不允許的(這是一般的Unix東西-因為main
參數以NULL分隔的字符串形式傳遞,沒有任何其他長度指示,如果它們包含NULL,它們將是截斷)。
watch
將使用sh
執行shell命令。 您可以單引號將該字符串括起來,以防止fish
驚慌用於其他shell的數據。
sudo watch -d 'lsof -a -p $(pidof myprogram)'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.