gpt4 book ai didi

bash - 为什么我的脚本不能在 FreeBSD 上运行,尽管它似乎可以在 Linux 上运行?就好像 FreeBSD 忽略了 "if"

转载 作者:行者123 更新时间:2023-12-05 09:00:43 27 4
gpt4 key购买 nike

我正在尝试编写一个可移植的安装脚本来为我的编程语言构建编译器。可以看到脚本here :

mkdir ArithmeticExpressionCompiler
cd ArithmeticExpressionCompiler
if command -v wget &> /dev/null
then
wget https://flatassembler.github.io/Duktape.zip
else
curl -o Duktape.zip https://flatassembler.github.io/Duktape.zip
fi
unzip Duktape.zip
if command -v gcc &> /dev/null
then
gcc -o aec aec.c duktape.c -lm # The linker that comes with recent versions of Debian Linux insists that "-lm" is put AFTER the source files, or else it outputs some confusing error message.
else
clang -o aec aec.c duktape.c -lm
fi
./aec analogClock.aec
if command -v gcc &> /dev/null
then
gcc -o analogClock analogClock.s -m32
else
clang -o analogClock analogClock.s -m32
fi
./analogClock

但是,当我在 FreeBSD 上运行它时,它会提示找不到 wget。但是脚本会在调用之前检查 wget 是否存在。 wget 不应在 FreeBSD 上调用。现在,我知道 FreeBSD 使用 sh 而不是 bash,而且我想我的脚本实际上并不符合 POSIX。那么,我做错了什么?

最佳答案

来自POSIX规范:

If a command is terminated by the control operator ( '&'), the shell shall execute the command asynchronously in a subshell.This means that the shell shall not wait for the command to finishbefore executing the next command.

在 posix 中 &> 不被 posix 支持,相反它会将 & 视为后台命令指示器,导致您的命令与下一部分 异步运行>/dev/null 被视为单独的命令。这基本上是如果你要运行:

command -v wget & > /dev/null

相反,您必须以另一种方式重定向:

command -v wget >/dev/null 2>&1

关于bash - 为什么我的脚本不能在 FreeBSD 上运行,尽管它似乎可以在 Linux 上运行?就好像 FreeBSD 忽略了 "if",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75102945/

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