gpt4 book ai didi

bash - 如果输入不完全是 1 行,则返回错误,否则将输入通过管道传递到下一步

转载 作者:行者123 更新时间:2023-11-29 09:12:53 25 4
gpt4 key购买 nike

我有一系列用管道链接在一起的命令:

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 可以使用什么命令?

最佳答案

使用读取。这是一个符合您的规范的 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"
}

注意事项

  1. “一行”假定单行后跟一个换行符。如果您的输入可能是一个包含内容但没有换行符的文件,那么这将失败。
  2. 给定像a|b 这样的管道,a 无法阻止b 运行。至少,当 a 没有输出时,b 需要处理。

演示:

$ 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

关于bash - 如果输入不完全是 1 行,则返回错误,否则将输入通过管道传递到下一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34634390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com