将标准输入重定向到标准输出

将标准输入重定向到标准输出

我有一个脚本,例如 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

相关内容