首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash shell脚本,如何在命令中使用管道

Bash shell脚本,如何在命令中使用管道
EN

Stack Overflow用户
提问于 2021-06-12 13:26:55
回答 2查看 3K关注 0票数 1

试图在bash脚本中使用管道。这在我的Linux上工作得很好,但是bash脚本出错了。我做错了什么?

代码语言:javascript
复制
  #!/bin/bash
  #some code
  cmd="cat file2 | grep ':'  | awk -F \":\" '{print \$1}' > pool_names"
  echo $cmd
  exec $cmd

我看到了这个错误

代码语言:javascript
复制
cat: invalid option -- 'F'
Try 'cat --help' for more information.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-12 13:53:03

在shell中,“简单命令”是一个可选变量赋值和重定向的序列,在任意序列中,可选地后面跟着单词和重定向,由一个控制操作符终止。(请参见https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_01),而管道是一个或多个命令的序列,这些命令由控制操作符‘https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_02’分隔。当shell看到行exec $cmd时,它不会看到控制操作符|,因此这是一个简单的命令。(这与exec无关,任何命令都会发生相同的行为。)然后,它扩展行中的变量,并遵循规则the first field shall be considered the command name and remaining fields are the arguments for the command,因此调用exec时带有一堆参数。exec并不试图将参数解释为shell运算符(可能您打算使用eval而不是exec),而只是将所有参数传递给cat

票数 2
EN

Stack Overflow用户

发布于 2021-06-12 13:38:55

bash内置exec命令有一个完全不同的目标,如https://www.computerhope.com/unix/bash/exec.htm中所解释的那样。

为了让脚本工作,或者像@Jonathan在评论中建议的那样,您必须用exec代替eval,您可以使用bash -c "$cmd"

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67949305

复制
相关文章

相似问题

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