编写从管道读取的bash脚本

Sim*_*mon 11 bash

我想做那样的事情:

cat file.txt | ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

file.txt的

http://google.com
http://amazon.com
...
Run Code Online (Sandbox Code Playgroud)

如何读取myscript.sh中的数据?

Gil*_*not 12

你可以用while loop(逐行处理)这样做,这是这类事情的常用方法:

#!/bin/bash

while read a; do
    # something with "$a"
done
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅http://mywiki.wooledge.org/BashFAQ/001


相反,如果您想在变量中填充整个文件,请尝试执行以下操作:

#!/bin/bash

var="$(cat)"
echo "$var"
Run Code Online (Sandbox Code Playgroud)

要么

#!/bin/bash

var="$(</dev/stdin)"
echo "$var"
Run Code Online (Sandbox Code Playgroud)


Con*_*Map 5

你可以使用这样的东西:

while read line; do
  echo $line;
done
Run Code Online (Sandbox Code Playgroud)

在这里进一步阅读:Bash 脚本,从 stdin 管道读取值


poi*_*oae 3

read可以像这样欺骗从管道接受:

echo "hello world" | { read test; echo test=$test; }
Run Code Online (Sandbox Code Playgroud)

甚至写一个像这样的函数:

read_from_pipe() { read "$@" <&0; }
Run Code Online (Sandbox Code Playgroud)