繁体   English   中英

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

[英]Use last commands output as a pipeline input for bash shell script

/ usr / local / bin / sayHi的代码

echo hi $ 1

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

如果我想运行echo John | sayHi echo John | sayHihi John有相同的输出,我怎么能这样做?

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

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

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

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

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

${1:-...}语法是Shell参数扩展use $1 if it has a non-empty value otherwise use ...

注意:如果没有提供参数,并且标准输入上没有提供数据,这将“挂起”(在cat )。

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

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

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

#!/bin/bash
read
echo hi $REPLY

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM