仅在以非交互方式运行 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”的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft 文档在以编程方式生成 SAS 令牌时出现问题。错误:“签名字段格式不正确”
使用 git bash 运行 bash 脚本时出现“找不到免费命令”