Bash:只允许管道(|)或重定向(<)传递数据,否则显示用法

标签 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

感谢任何帮助。

问候
尼克尔·古普塔

最佳答案

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

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

关于Bash:只允许管道(|)或重定向(<)传递数据,否则显示用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5482062/

相关文章:

用于迭代目录中的文件和模式匹配文件名的 Bash 脚本

linux - 如何削减 ifconfig 以单独获取 eth* 详细信息?

javascript - 在 html 页面上显示命令行输出

bash - 如何在 shell 脚本中使用向上箭头键获取上一个命令

bash - 代码必须在子目录中找到所有 MP4 文件才能使用 ffmpeg 进行压缩

json - 解析错误 : Invalid numeric literal at line 1, 第 2 列 (bash)

bash - bash 中使用的 If [[-n variable ]] 语法是什么

linux - 复制目录下所有文件夹中的文件

bash - 如何在 bash 中获取光标位置?

Bash 陷阱,捕获并将它们作为同一函数的参数传递