使用last命令输出作为bash shell脚本的管道输入

时间:2014-11-07 00:46:06

标签: bash shell pipeline

/ usr / local / bin / sayHi

代码

  

echo hi $ 1

现在在终端中,如果我运行sayHi John,它将输出hi John

如果我想运行echo John | sayHi,要获得相同的输出hi John,我该怎么做?

2 个答案:

答案 0 :(得分:2)

管道将数据提供给标准输入。您没有将标准输入作为参数。它只是标准输入。

要从该脚本中获得您想要的内容,您可以使用:

echo hi ${1:-$(cat)}

如果存在第一个参数,那将使用第一个参数,否则使用cat来读取标准输入。

如果没有提供文件参数,cat从标准输入读取,并将其作为输出产生(在标准输出上)。

${1:-...}的{​​{1}}语法为Shell Parameter Expansion

注意:如果没有提供参数且没有提供标准输入数据,这将“挂起”(在use $1 if it has a non-empty value otherwise use ...中)。

答案 1 :(得分:1)

好问题。如果您希望bash脚本通过管道使用输入发送,则必须从stdin中读取它。

目前,您的脚本正在查找作为参数传递给程序的输入。 $ 1构造是跟随脚本的第一个参数。参数是以空格分隔的。

要从stdin获取输入,请调用read函数。

#!/bin/bash
read
echo hi $REPLY

$ REPLY是读取内容的默认位置。