是否有一个标准的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