【问题标题】:How to pipe the final result in bash file?如何将最终结果传输到 bash 文件中?
【发布时间】:2020-12-09 11:12:20
【问题描述】:

在终端中:

echo "hello" &&  read varname &&  echo $varname  | rev

和:

echo "hi" ; read varname ; echo $varname  | rev

给出预期的结果

如果我这样写脚本:

#!/bin/bash

echo "hi" &&
read varname &&
echo $varname
./try.sh  | rev

第一行被发送到标准输出:(
如何编写 bash 脚本来传递最终结果?

编辑: 我想我遇到的问题是要了解如何仅通过管道传输我想要传输的内容。上例中的所有 echo 语句都写入标准输出。

编辑2: 现在知道了:

#!/bin/bash

echo test >&0  &&
read varname &&
echo $varname

它似乎有效,这是解决问题的惯用方法还是该解决方案的一些缺点。谷歌像往常一样不提供任何东西。

【问题讨论】:

  • 如果您使用 && 和/或 ||,您将需要在同一行上的语句。否则,您可以使用 if 语句。
  • 不确定您的问题,但我猜问题是hi 打印为ih?为什么不将| rev 添加到脚本中?
  • 我需要将不同的程序连接在一起,写这个来演示我使用管道获取最后一个标准输出而不是全部的问题
  • 最终结果如何?我不明白你的意思?
  • 我猜问题是 hi 打印为 ih,是的,这是正确的,抱歉不清楚

标签: bash pipe stdout


【解决方案1】:

您不能只从外部将管道应用于 shell 脚本的特定行。但是,您可以将第一个“hi”打印到 stderr,在这种情况下,您的示例只会反转最终文本:

#!/bin/bash

echo "hi" >&2 &&
read varname &&
echo $varname
./try.sh  | rev

【讨论】:

  • 这是 Chai 提供的相同答案,两个答案的时间戳相同,所以我不知道谁先回答,谢谢
  • @somina 至少两者都 +1。
【解决方案2】:

如果您将第一行发送到 stderr 会怎样? 这对你有用吗?第一行向 stderr 回显 hi。

#!/bin/bash

>&2 echo "hi" &&
read varname &&
echo $varname

如果我输入 hello 作为脚本的输入,输出看起来像

hi
hello
olleh

【讨论】:

  • 这样更好! ,但我想使用 stderr 处理错误,这是朝着正确方向迈出的一步,也许应该可以将 stdout 重定向到 stdin ?
  • 刚刚尝试使用 echo test >&0,它似乎工作:)
猜你喜欢
  • 1970-01-01
  • 2014-12-12
  • 2017-02-08
  • 2019-02-18
  • 2011-01-08
  • 1970-01-01
  • 2015-03-17
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多