Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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
Linux 如何使.bash_配置文件中的函数使用管道从标准输入接受输入|_Linux_Bash_Unix - Fatal编程技术网

Linux 如何使.bash_配置文件中的函数使用管道从标准输入接受输入|

Linux 如何使.bash_配置文件中的函数使用管道从标准输入接受输入|,linux,bash,unix,Linux,Bash,Unix,假设我在.bash_配置文件中有一个这种性质的函数 sayword(){ echo $1 } 现在,该命令将像sayword hello 现在,我希望该函数能够使用unix管道从其他命令获取输入。类似于cat words.txt | sayword的东西,它输出words.txt中的每个单词。我该怎么做?。我在这里读到一个关于重定向到dev/null的问题,但这似乎不起作用 你可以这样写 函数sayword(){ 如果[$#-eq 0] 然后 当读取输入时,执行以下操作: echo$输入

假设我在.bash_配置文件中有一个这种性质的函数

sayword(){
   echo $1
}
现在,该命令将像
sayword hello

现在,我希望该函数能够使用unix管道从其他命令获取输入。类似于
cat words.txt | sayword
的东西,它输出words.txt中的每个单词。我该怎么做?。我在这里读到一个关于重定向到dev/null的问题,但这似乎不起作用

你可以这样写

函数sayword(){
如果[$#-eq 0]
然后
当读取输入时,执行以下操作:
echo$输入
完成
其他的
回声1美元
fi
}
然后你可以这样称呼它

date | sayword

这就是您想要的
-t
条件:可以测试stdin是管道/重定向还是终端(即交互式):

sayword(){
{
回声“$(日期)-说出单词”
如果[-t0];则
#stdin是终端:从cmdline参数获取输入:
回音“$*”
其他的
#stdin是管道或重定向
猫
fi
}>>“$HOME/words.txt”
}
然后,这两个文件都附加到文件中:

$sayword你好
$cat~/words.txt
星期四5月28日09:22:27美国东部夏令时2020-说话
你好
$echo foo bar | sayword
$cat~/words.txt
星期四5月28日09:22:27美国东部夏令时2020-说话
你好
星期四5月28日09:22:37美国东部夏令时2020-说话
富吧

虽然这很有帮助,但看起来我可以这样叫它“说你好”,我需要这样的灵活性。无论如何,我感谢你的回答,谢谢。我编辑了我的回答以满足你的需要,检查它是否有用。如果你把它称为
sayword 1 2 3
它只会重复
1
。如果希望所有输入都在一行上,请使用
echo“$@”
。如果要在单独的行中输出,请使用
printf“%s\n”“$@”