fish shell watch 命令中的命令替换
fish shell command subsitution in watch command
我正在尝试在鱼中使用 watch 命令 shell。
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)
即退出引号并执行命令替换(中间没有 space,因此将直接附加)。
这里有一点差距,您希望命令的输出根本不被拆分 - 在这里它会在换行符上拆分它,并生成多个标记,例如 "lsof -a -p "line1 "lsof -a -p"line2
。在这种情况下这应该不是问题,但如果你想要它,你应该使用 string split0
like
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)'
我正在尝试在鱼中使用 watch 命令 shell。
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)
即退出引号并执行命令替换(中间没有 space,因此将直接附加)。
这里有一点差距,您希望命令的输出根本不被拆分 - 在这里它会在换行符上拆分它,并生成多个标记,例如 "lsof -a -p "line1 "lsof -a -p"line2
。在这种情况下这应该不是问题,但如果你想要它,你应该使用 string split0
like
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)'