pau*_*ulj 2 bash pipe shell-script
我在一些脚本中看到这样的命令:/bin/cat somefile | someprogram. 我想知道如何像 someprogram 一样读取整个管道。因此,当我运行时 /bin/cat something | myprogram.sh,myprogram.sh 有一个名为 mypipevar 的变量,它等于通过管道传输的任何内容 - 所有管道文本。如果这不清楚,请告诉我。我读过 read 可能不起作用,bash 可能不是正确的 shell。
管道将stdout一个程序连接到另一个程序stdin,因此在您的脚本中只需读取即可stdin,您将获得上一个命令打印出来的内容。将其读入变量的一种简单方法是使用 cat ,例如 inside myprogram.sh:
mypipevar="$(cat ${1:-/dev/stdin})"
echo "Obtained the value: '$mypipevar'"
Run Code Online (Sandbox Code Playgroud)
然而,很多时候你想一行一行地处理事情而不是一次全部处理,这可以用
while read line
do
echo "$line"
done < "${1:-/dev/stdin}"
Run Code Online (Sandbox Code Playgroud)
请注意,这${1:-/dev/stdin}将为您提供第一个参数,或者如果未指定任何参数,则/dev/stdin它将包含标准输入的内容,可以像文件一样读取。这允许您将脚本作为command | script或简单地作为script filename.
| 归档时间: |
|
| 查看次数: |
5673 次 |
| 最近记录: |