簡體   English   中英

魚殼命令替換為watch命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM