加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash如何从管道输入或命令行参数中读取

发布时间:2020-12-15 22:46:06 所属栏目:安全 来源:网络整理
导读:我想从管道或命令行参数(比如$1)读取一些数据,无论哪个提供(优先级有管道). 这个片段告诉我管道是否打开但是我不知道要放入什么内容以便不阻止脚本(test.sh)(使用read或cat) if [ -t 0 ]then echo nopipe DATA=$1else echo pipe # what here? # read from pi
我想从管道或命令行参数(比如$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

执行上面的test.sh脚本我应该得到以下输出:

$echo 1234 | test.sh
1234
$test.sh 123
123
$echo 1234 | test.sh 123
1234

解决方法

您可以将所有stdin读入变量:

data=$(cat)

请注意,您所描述的是非规范行为.好的Unix公民会:

>如果作为参数提供,则从文件名中读取(无论stdin是否为tty)
>如果没有提供文件,则从标准输入读取

这就是你在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读