使用last命令输出作为bashshell脚本的管道输入
代码为/usr/local/bin/sayHi 回声你好1美元 现在在终端中,如果我运行使用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将从标准输入读取,并将
sayhijohn
,它将输出hijohn
如果我想运行echo John | sayHi,以获得相同的输出
hi John
,我该怎么做呢?管道将数据馈送到标准输入。您不能将标准输入作为参数。它只是标准输入
要从该脚本中获得所需内容,可以使用:
echo hi ${1:-$(cat)}
如果有第一个参数,它将使用第一个参数,否则将返回使用cat
读取标准输入
如果没有提供文件参数,Ascat
将从标准输入读取,并将其作为输出(在标准输出上)
${1:-…}
语法用于如果有非空值,则使用$1,否则使用…
注意:如果在标准输入中没有提供参数和数据,这将“挂起”(在
cat
)。如果希望bash脚本通过管道使用输入发送,则必须从stdin读入它
当前,脚本正在查找作为参数传递给程序的输入。$1构造是脚本后面的第一个参数。参数以空格分隔
要从stdin获取输入,请调用read函数
#!/bin/bash
read
echo hi $REPLY
$REPLY是read放入内容的默认位置。谢谢您的回答。你能解释一下${1:-$(cat)}中的破折号吗?谢谢你解释了$REPLY变量!当然如果需要,可以使用自己的变量:read MyVar echo$MyVar