首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令不使用特殊字符和引号

命令不使用特殊字符和引号
EN

Stack Overflow用户
提问于 2021-09-11 19:01:19
回答 1查看 72关注 0票数 0
代码语言:javascript
复制
watch -n 1 "paste <(ssh ai02 'nvidia-smi pmon -s um -c 1') <(ssh ai03 'nvidia-smi pmon -s um -c 1' )"

上面的命令用于水平堆叠两个服务器的GPU统计数据。它不需要Watch命令就可以工作,但是得到以下错误

代码语言:javascript
复制
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `paste <(ssh ai02 'nvidia-smi pmon -s um -c 1') <(ssh ai03 'nvidia-smi pmon -s um -c 1' )'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-11 20:20:12

您没有提供一个可重复的示例,但我想我成功地为测试做了一个示例:

代码语言:javascript
复制
watch -n1 "paste <(seq -w 1000 | shuf -n '10' ) <(seq -w 1000 | shuf -n '10')"

输出类似的错误:

代码语言:javascript
复制
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `paste <(seq -w 1000 | shuf -n '10' ) <(seq -w 1000 | shuf -n '1
0')'

为了更简单地解决这个问题,我们可以将sh -c改为bash -c

代码语言:javascript
复制
watch -n1 -x bash -c 'paste <(seq -w 1000 | shuf -n "10" ) <(seq -w 1000 | shuf -n "10")'

来自watch手册:

代码语言:javascript
复制
-x, --exec
     Pass command  to exec(2) instead of  sh -c which reduces  the need to
     use extra quoting to get the desired effect.

如果您需要维护原始命令行中的撇号,那么也可以转义:

代码语言:javascript
复制
watch -e -n1 -x bash -c 'paste <(seq -w 1000 | shuf -n '\''10'\'' ) <(seq -w 1000 | shuf -n '\''10'\'')'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69145919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档