Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用last命令输出作为bashshell脚本的管道输入_Bash_Shell_Pipeline - Fatal编程技术网

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

使用last命令输出作为bashshell脚本的管道输入,bash,shell,pipeline,Bash,Shell,Pipeline,代码为/usr/local/bin/sayHi 回声你好1美元 现在在终端中,如果我运行sayhijohn,它将输出hijohn 如果我想运行echo John | sayHi,以获得相同的输出hi John,我该怎么做呢?管道将数据馈送到标准输入。您不能将标准输入作为参数。它只是标准输入 要从该脚本中获得所需内容,可以使用: echo hi ${1:-$(cat)} 如果有第一个参数,它将使用第一个参数,否则将返回使用cat读取标准输入 如果没有提供文件参数,Ascat将从标准输入读取,并将

代码为/usr/local/bin/sayHi

回声你好1美元

现在在终端中,如果我运行
sayhijohn
,它将输出
hijohn


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

管道将数据馈送到标准输入。您不能将标准输入作为参数。它只是标准输入

要从该脚本中获得所需内容,可以使用:

echo hi ${1:-$(cat)}
如果有第一个参数,它将使用第一个参数,否则将返回使用
cat
读取标准输入

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

${1:-…}
语法用于
如果有非空值,则使用$1,否则使用…


注意:如果在标准输入中没有提供参数和数据,这将“挂起”(在
cat
)。如果希望bash脚本通过管道使用输入发送,则必须从stdin读入它

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

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

#!/bin/bash
read
echo hi $REPLY

$REPLY是read放入内容的默认位置。

谢谢您的回答。你能解释一下${1:-$(cat)}中的破折号吗?谢谢你解释了$REPLY变量!当然如果需要,可以使用自己的变量:read MyVar echo$MyVar