【发布时间】:2022-01-19 17:28:47
【问题描述】:
我有一个语法兼容bash 和zsh 的shell 脚本,除了具有zsh 特定语法的部分。如果来自 bash,则会引发语法错误
使用 bash 时是否有一种简单的方法可以避开此类部分。
该脚本是一个 bash 函数,用于获取目录中的所有文件。它在 zsh 中运行良好(与问题无关)
#!/usr/bin/env bash
shell=$(ps -p $$ -oargs=)
if [ $shell = "bash" ]; then
for f in ~/.functions.d/*.sh; do source $f; done
elif [ $shell = "zsh" ]; then
for f (~/.functions.d/**/*.sh) source $f
fi
错误是由第 7 行产生的,在 bash 中进行采购时
相关链接
【问题讨论】:
-
bash必须解析整个脚本,无论特定块是否会被执行,所以如果它真的不是有效的bash语法,你将不得不将您的文件拆分为单独的bash和zsh版本,并让调用者选择要获取的文件。 -
谢谢,是否可以从脚本中控制调用者的行为?
-
第 7 行是
elif [ $shell = "zsh" ]; then我不明白为什么这会导致bash出现错误。实际问题是第 8 行的for语法。 -
OP 可能不包括 shebang。
elif子句的主体是无效的bash语法,但必须对其进行解析才能找到完成整个if语句的fi。 -
你是从0开始数的吗,是下一行。错误是
syntax error near unexpected token (。但正如我所说,我的问题不是关于“那个”脚本