相关疑难解决方法(0)

如何从stdin读取mutliline输入到变量以及如何在shell中打印出一个(sh,bash)?

我想做的是以下内容:

  1. 从多行输入读stdin入变量A
  2. 进行各种操作 A
  3. A,而不会失去定界符符号(\n,\r,\t等)到另一个命令

目前的问题是,我无法用read命令读取它,因为它停止在换行时读取.

我可以读取stdin cat,像这样:

my_var=`cat /dev/stdin`
Run Code Online (Sandbox Code Playgroud)

,但后来我不知道如何打印它.因此换行符,制表符和其他分隔符仍然存在.

我的示例脚本如下所示:

#!/usr/local/bin/bash

A=`cat /dev/stdin`

if [ ${#A} -eq 0 ]; then
        exit 0
else
        cat ${A} | /usr/local/sbin/nextcommand
fi
Run Code Online (Sandbox Code Playgroud)

bash shell stdin multiline

56
推荐指数
6
解决办法
6万
查看次数

Shell管道:当一个命令失败时立即退出

我在bash中使用了几个命令的管道.如果其中一个命令失败,有没有办法配置bash立即终止整个管道中的所有命令?

在我的例子中,第一个命令command1运行一段时间直到产生一些输出.您可以替代command1(sleep 5 && echo "Hello"),例如.

现在,command1 | false确实在5秒后失败但不是立即失败.

此行为似乎与命令生成的输出量有关.例如,find / | false立即返回.

一般来说,我想知道为什么bash表现得像这样.任何人都可以想象任何情况下,像这样的代码command1 | non-existing-command不会立即退出吗?

PS:使用临时文件对我来说不是一个选项,因为我管道的中间结果很大,无法存储.

PPS:似乎set -eset -o pipefail没有影响这种现象.

bash pipe

23
推荐指数
1
解决办法
1万
查看次数

标签 统计

bash ×2

multiline ×1

pipe ×1

shell ×1

stdin ×1