shell - watch 命令中的 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
like
sudo watch -d "lsof -a -p "(pidof myprogram | string split0)
只会拆分 NULL 字节,命令行参数中不允许使用这些字节(这是通用的 unix 事物 - 因为参数main
作为 NULL 分隔的字符串传递,没有任何其他长度指示,如果它们包含 NULL,它们将被截断)。
推荐阅读
- flutter - FieldValue.increment 在颤动中无法离线工作
- c# - 如何使用多行正则表达式将模式与数字或数字和单个破折号匹配
- javascript - Splitchunks之后没有定义全局变量
- kubernetes - 如何在 containerd 中添加 Harbor 注册表
- python - 无法使用 pyodbc python 连接到 Access 数据库
- mongodb - 远程连接mongodb
- winapi - 为什么 32 位 Windows 应用程序“不需要释放使用 LoadResource 加载的资源”?
- powershell - Windows PowerShell:如何解析日志文件?
- python - 将字节转换为列表未按预期工作
- python - 参数范围和返回值的区别