我想从管道或命令行参数(比如说$1
)中读取一些数据,无论哪个提供(优先级都有管道).
这个片段告诉我管道是否打开但是我不知道要放入什么内容以便不阻止脚本(test.sh
)(使用read
或cat
)
if [ -t 0 ]
then
echo nopipe
DATA=$1
else
echo pipe
# what here?
# read from pipe into $DATA
fi
echo $DATA
Run Code Online (Sandbox Code Playgroud)
执行test.sh
上面的脚本我应该得到以下输出:
$ echo 1234 | test.sh
1234
$ test.sh 123
123
$ echo 1234 | test.sh 123
1234
Run Code Online (Sandbox Code Playgroud)
tha*_*guy 12
您可以将所有stdin读入变量:
data=$(cat)
Run Code Online (Sandbox Code Playgroud)
请注意,您所描述的是非规范行为.好的Unix公民会:
你看这是什么sed
,grep
,cat
,awk
,wc
和nl
仅举几例.
无论如何,这是您展示所请求功能的示例:
$ cat script
#!/bin/bash
if [ -t 0 ]
then
echo nopipe
data=$1
else
echo pipe
data=$(cat)
fi
echo "$data"
$ ./script 1234
nopipe
1234
$ echo 1234 | ./script
pipe
1234
Run Code Online (Sandbox Code Playgroud)