You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

watch命令执行含特殊字符与引号的命令时报unexpected token `('错误如何解决?

问题成因

watch命令默认调用sh执行传入的命令,而进程替换语法<()是bash、zsh等非POSIX标准shell的专属特性,原生sh不支持该语法,所以解析到(时就会抛出语法错误。你直接在终端执行命令时用的是bash/zsh环境,所以可以正常运行,套上watch后执行环境切换为sh,就会触发报错。

解决方法

方法1:显式指定bash执行

将需要运行的命令作为参数传给bash -c即可,注意内层引号要做转义处理:

watch -n 1 "bash -c 'paste <(ssh ai02 \"nvidia-smi pmon -s um -c 1\") <(ssh ai03 \"nvidia-smi pmon -s um -c 1\")'"

方法2:临时指定watch使用的shell

执行watch前声明SHELL环境变量为bash,不需要修改原命令的引号结构,写法更简洁:

SHELL=/bin/bash watch -n 1 "paste <(ssh ai02 'nvidia-smi pmon -s um -c 1') <(ssh ai03 'nvidia-smi pmon -s um -c 1' )"

方法3:用临时文件实现拼接(兼容POSIX标准)

如果不想依赖bash特性,可以先将两个服务器的查询结果写入临时文件再做拼接:

watch -n 1 "ssh ai02 'nvidia-smi pmon -s um -c 1' > /tmp/ai02_gpu.tmp; ssh ai03 'nvidia-smi pmon -s um -c 1' > /tmp/ai03_gpu.tmp; paste /tmp/ai02_gpu.tmp /tmp/ai03_gpu.tmp"

内容的提问来源于stack exchange,提问作者JimmyJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:30:01