【问题标题】:using here document and pipeline of sh at the same time同时使用here文档和sh的管道
【发布时间】:2015-02-11 20:49:54
【问题描述】:

我在这里使用 sh 的文档来运行一些命令。现在我想使用 awk 解析这些命令的输出。但是,每次执行它时,我都会在命令的输出中附加类似“% No such child process”

这就是我的脚本的样子。

#!/bin/sh
com = "sudo -u username /path/of/file -l"
$com <<EOF | awk '{print $0}'
Commands.
.
.
.
EOF

如何在不附加不需要的字符串的情况下使用 heredoc 和管道? 谢谢

【问题讨论】:

    标签: sh heredoc


    【解决方案1】:

    您的变量分配在几个方面是错误的。首先,您实际上并没有分配变量;您正在尝试运行名为com 的命令,其参数为= 和字符串"sudo ..."= 两侧不得使用空格:

    com="sudo ..."
    

    第二,命令行不应该存储在变量中; shell 的解析器只能按照您对非常简单的命令的意图进行工作。完整输入命令,或使用 shell 函数。

    com () {
        sudo -u username /path/to/file -l
    }
    
    com <<EOF | awk '{print $0}'
    ...
    EOF
    

    【讨论】:

      【解决方案2】:

      没问题,检查:

      $ cat <<EOF | awk '{print $1}'
      a b c
      1 2 3
      EOF
      a
      1
      

      【讨论】:

      • 这很奇怪。因为如果您打印 $0,它会在最后为您提供输出加上类似这样的内容 "% No such child process 4330"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2020-05-09
      • 2017-07-17
      • 2018-12-13
      相关资源
      最近更新 更多