我有一个脚本,例如 myscript.sh,它必须将从 stdin 获取的内容重定向到 stdout(像 cat 一样)。
例如:
myscript.sh < myfile.txt > myfile2.txt
这个怎么做?
另外,我怎样才能将 stdout 重定向到另一个文件而不是 myfile2.txt?
我的尝试:
我尝试使用:
echo $*
并且它只适用于:
myscript.sh | cat myfile.txt
如果我使用:
myscript.sh < myfile.txt
它什么也没打印出来
答案1
我不明白你想要什么:$* 输出位置参数,而您没有提供任何参数,所以没有输出(除了换行符)。
cat
当给定一个要列出的文件时,不会读取标准输入,因此具有与(不完全正确,但在输入/输出方面是正确的)myscript.sh | cat myfile.txt
相同的效果。myscript.sh ; cat myfile.txt
如果您希望脚本将输入复制到输出,那么它应该只包含cat
。
如果您想要 $* 的输出,那么您需要运行myscript.sh {parameters}
。
你说的“将 stdout 重定向到另一个文件而不是 myfile2.txt”是什么意思?你大概不是指... > myfile3.txt
。
答案2
尝试将其添加cat <&0
到您想要执行重定向作业的脚本中。
上面&0
代表stdin
文件描述符,你实际上是将从中获取的内容放入stdin
其中cat
。
或者,使用以下循环自己执行此操作:
while read line
do
echo "$line"
done
答案3
我猜你想复制脚本输入到终端输出,而不是重定向。
cat myfile.txt | tee /dev/tty | myscript.sh > myfile2.txt
甚至更简单
cat myfile.txt; myscript.sh < myfile.txt > myfile2.txt