我有一系列用管道链接在一起的命令:
should_create_one_line | expects_one_line
第一个命令should_create_one_line应该生成只有一行的输出,但在奇怪的情况下,输出可能是多行或空。
我想在这两者之间添加一个步骤validate_one_line:
should_create_one_line | validate_one_line | expects_one_line
如果其输入恰好包含 1 行,validate_one_line则将简单地输出其输入。如果其输入包含多于 1 行或为空,validate_one_line则应导致整个步骤序列停止并返回错误代码。
我可以使用什么命令validate_one_line?
使用read。这是一个符合您的规格的 shell 函数:
exactly_one_line() {
local line # Use to echo the line
read -r line || return # Guarantee at least one line is read
read && return 1 # Indicate failure if another line is successfully read
echo "$line"
}
Run Code Online (Sandbox Code Playgroud)
a|b,a无法阻止b运行。至少,b需要处理a不产生输出的情况。演示:
$ wc -l empty oneline twolines
0 empty
1 oneline
2 twolines
3 total
$ exactly_one_line < empty; echo $?
1
$ exactly_one_line < oneline; echo $?
oneline
0
$ exactly_one_line < twolines; echo $?
1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |