【发布时间】:2019-08-08 16:36:06
【问题描述】:
我正在尝试在 fish shell 中使用 watch 命令。
sudo watch -d "lsof -a -p (pidof myprogram)"
如您所见,鱼的这个有效命令替换语法。但是当我运行它时,我在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)"
有没有办法解决这个问题?
【问题讨论】:
-
我很难理解为什么
fish应该关心看起来像另一种语言语法的数据。如果发生用户期望的命令替换,当然发出警告,但将其视为错误? -
这是一个语法错误,因为
$()是无效的语法。这是因为否则人们会尝试$()并使用文字$()获取命令执行,所以告诉他们他们最有可能尝试的方法不起作用会更安全。解决方法是单引号,就像你说的那样。