Bash:仅允许Pipe(|)或Redirect(<)传递数据,否则显示用法

时间:2011-03-30 05:01:56

标签: bash

我有一个脚本,其中包含几个参数 现在,我已将脚本修改为除多个文件名以外的操作 我还希望在通过管道(|)或重定向输入(<)接收输入时执行此脚本。 但是,如果没有提供上述三个输入,我不希望脚本在终端上等待输入,而是显示使用说明。

我正在使用以下功能:

# PIPED CONTENT
if [ "$#" == "0" ]; then
    READINPUT="1"
    if [ "x$TEXTINPUT" == x"" ]; then
        READINPUT=1
        TMPFL=`tempfile -m 777`
        while read data; do
            echo "${data}" >> $TMPFL
        done
        TEXTINPUT="`cat $TMPFL`"
            rm $TMPFL
    fi

#       if [ "x$TEXTINPUT" == x"" ]; then
#           if [ "$#" == "0" ]; then usage; fi
#       fi
fi

感谢任何帮助。

问候
尼基尔古普塔

2 个答案:

答案 0 :(得分:6)

if test -t 0; then
    echo Ignoring terminal input.
else
    process -
fi

-t测试将文件描述符作为参数(0是stdin),如果是终端则返回true。

答案 1 :(得分:1)

请注意,有两个不同的“测试”命令:内置bash命令和“test”程序,它通常作为/ usr / bin / test安装,是coreutils包的一部分。两者提供相同的功能。

[[ -t 0 ]]

相当于

/usr/bin/test -t 0

您可以在“bash”命令行上运行上述任一操作,但结果相同。