仅在以非交互方式运行 bash 脚本时出现错误“cat: write error: Broken pipe”

Posted

技术标签:

【中文标题】仅在以非交互方式运行 bash 脚本时出现错误“cat: write error: Broken pipe”【英文标题】:Getting error "cat: write error: Broken pipe" only when running bash script non-interactively 【发布时间】:2016-09-02 16:15:31 【问题描述】:

我写了一个 bash 脚本,我在其中定义了一个像这样的变量:

var=$(cat $file_path | head -n $var2 | tail -n 1 | cut -f1)

其中$file_path 仅包含文件的路径,$var2 是一个 int,例如 1 或 2。因此,该变量被分配了文件行号 var2 的第一个字段的值。

当我从命令行运行它时,它工作得很好。但是,在运行包含此命令的脚本时,我收到错误

cat:写入错误:管道损坏

知道为什么会这样吗?

【问题讨论】:

不是第一行的第一个字段,而是行号的第一个字段var2,对吧?您是否尝试使用set -x 运行以查看您的命令扩展为什么?你在哪里设置变量? 是的,我的错,它需要第一个文件在第 var2 行。我在脚本前面定义了 var2。 用单个命令替换长管道怎么样?也许与此类似? var=$(sed -ne "$var2s/ .*//p;q" "$file_path")(当然,尽管有空格问题。) 【参考方案1】:

没有必要使用cat,因为head 需要一个文件名参数。

var=$(head -n $var2 $file_path | tail -n 1 | cut -f1)

实际上,不需要使用任何这些命令。

var=$(awk -v line=$var2 'NR == line  print $1; exit ' $file_path)

【讨论】:

以上是关于仅在以非交互方式运行 bash 脚本时出现错误“cat: write error: Broken pipe”的主要内容,如果未能解决你的问题,请参考以下文章

Bash 语法错误

Microsoft 文档在以编程方式生成 SAS 令牌时出现问题。错误:“签名字段格式不正确”

使用 git bash 运行 bash 脚本时出现“找不到免费命令”

Bash & awk:尝试在 awk 中使用 bash 脚本参数时出现分段错误

仅在不使用调试器时出现段错误

仅在从 Windows 运行时出现 500 内部错误 (7)