gpt4 book ai didi

bash - "set -euo pipefail"对 eval 有影响吗?

转载 作者:行者123 更新时间:2023-12-05 04:12:47 33 4
gpt4 key购买 nike

考虑以下 bash 代码:

#!/usr/bin/env bash

set -euo pipefail

Test() {
grep 'XXX' data
echo 'test message'
}

data 是一个空文件,存在于与上述 bash 脚本相同的目录中。

如果使用以下代码调用 Test 函数,它不会向 stdout 输出任何内容。

Test

原因是 grep 命令返回退出状态 1 因为 data 不包含 XXX。所以 set -euo pipefail 导致 bash 脚本立即退出。

但是如果它被调用:

output=$(eval 'Test')
echo "output: $output"

它向标准输出生成以下消息:

output: test message

似乎 set -euo pipefaileval 没有影响。所以 grep 命令不会导致 bash 脚本退出。

最佳答案

只要 bash 被调用为 bash,你就基本正确了,除了它是 $(...),而不是 eval,抑制 -e。请注意,如果它可能被称为 sh(或 bash --posix):这是 the list of changes between POSIX and non-POSIX mode 上的第 40 项。 :

  1. Enabling POSIX mode has the effect of setting the 'inherit_errexit' option, so subshells spawned to execute command substitutions inherit the value of the '-e' option from the parent shell. When the 'inherit_errexit' option is not enabled, Bash clears the '-e' option in such subshells.

关于bash - "set -euo pipefail"对 eval 有影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554879/

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