Bash程序,在输入时返回1,否则返回0

  • 本文关键字:返回 程序 Bash bash shell
  • 更新时间 :
  • 英文 :


是否有一个标准的linux终端程序,当给定文本输入(在标准in中)返回1和0,如果没有提供文本?(相反的逻辑也可以)。

例子
echo hello | unknown_program  # returns 1
echo | unknown_program        # returns 0

编辑:

我的用例是用于从c++程序调用程序,这应该与它驻留在驱动器上的位置无关。这就是为什么我不喜欢创建一个脚本文件,而是使用我认为在任何linux(或ubuntu在我的情况下)计算机上存在的应用程序。

这是c++代码,但这不是问题的一部分。

auto isConditionMet = std::system("git status --porcelain | unknown_program");

我得到了一个可行的答案,所以至少我很高兴。

grep -q '.'将执行此操作。.匹配除换行符以外的任何字符。如果有匹配,grep返回0静态代码(success),如果没有匹配,则返回1

echo hello | grep -q '.'; echo $? # echoes 0
echo | grep -q '.'; echo $? # echoes 1

如果您想忽略只有空格的行,将.更改为[^ ]

使用bash:

#!/usr/bin/env bash
if [[ -t 0 ]]; then
echo "stdin is the TTY, no input has been redirected to me"
exit 0
fi
# grab all the piped input, may block
input=$(cat)
if [[ -z $input ]]; then
echo "captured stdin is empty"
exit 0
fi
echo "I captured ${#input} characters of data"
exit 1

如果保存为./test_input并使其可执行,则:

$ ./test_input; echo $?
stdin is the TTY, no input has been redirected to me
0
$ ./test_input < /dev/null; echo $?
captured stdin is empty
0
$ echo | ./test_input; echo $?
captured stdin is empty
0
$ ./test_input <<< "hello world"; echo $?
I captured 11 characters of data
1
$ echo foo | ./test_input; echo $?
I captured 3 characters of data
1

请注意,shell的命令替换$(...)删除了所有尾随的换行符,这就是为什么echo | ./test_input案例报告没有捕获数据。

使用wc -w进行单词计数,并使用shell算法检查条件并将0或1返回echo

echo | echo "$(("$(wc -w)" > 0))"                       # echoes 0
echo hello world | echo "$(("$(wc -w)" > 0))" # echoes 1

相关内容

  • 没有找到相关文章

最新更新