python - 忽略 Bash 脚本中 Source 命令的失败

标签 python bash macos shell terminal

所以我知道有很多关于堆栈溢出的答案可以忽略 bash 脚本中的错误。不过,它们似乎都不适用于 source 命令。

我已经尝试过可靠的 source ../bin/activate || true
我试过设置 set -e在运行命令之前

我试过source ../bin/activate 2>&1 /dev/null
我试过设置 set +e在运行命令之前。这也不起作用。

但是在每次运行此代码时,我都会收到

run.01: line 12: ../bin/activate: No such file or directory



这个问题的上下文是我正在创建一个运行一些 python 代码的简单 bash 脚本。指示用户如何创建特定的虚拟环境,如果他们正确设置,此行将自动激活它,否则,这应该忽略无法激活运行并在当前激活的任何环境中继续运行命令。
# Try virtual environment

source ../bin/activate || true

## Run.

code="../src-01/driver.v01.py"

## --------------------
graphInputFile="undirected_graph_01.inp"
graphType="undirected"
srcColId="0"
desColId="1"
degreeFind="2"
outFile="count.undirected.num.nodes.out"

python $code  -inpGraphFile $graphInputFile  -graphFormat $graphType  -colSrcId $srcColId -colDesId $desColId  -degreeFind $degreeFind  -output_file $outFile

无论 source ../bin/activate 是否存在,python 命令都应该执行。命令成功与否。为什么这些解决方案都不起作用,我有点不知所措,目前我认为 source考虑到情况,可能会做一些与正常命令不同的事情。

编辑:

我添加了shebang #!/bin/bash -x按要求添加到我的文件中,但这没有做任何事情。

这是我运行此脚本时的确切终端输出。
Lucas-Macbook:test-01 lucasmachi$ sh run.01
run.01: line 14: ../bin/activate: No such file or directory
Lucas-Macbook:test-01 lucasmachi$ 

哪里run.01是 bash 脚本的名称。

还要澄清一下,我展示的代码没有经过审查。这是整个脚本(除了现在顶部提到的shebang。)

最佳答案

这是 4.0 之前的 Bash 版本中的一个错误(macOS 卡在 3.2 上)。

鉴于此脚本:

#!/bin/bash
set -e
echo "Running $BASH_VERSION"
source "does not exist" || true
echo "Continuing"

在 macOS 上运行会说:
macos$ ./myscript
Running 3.2.57(1)-release
./myscript: line 3: does not exist: No such file or directory

在具有更新的 bash 版本的现代系统上,您会得到预期的行为:
debian$ ./myscript
Running 5.0.11(1)-release
./myscript: line 3: does not exist: No such file or directory
Continuing

如果您需要支持 macOS 和 Bash 3.2,请运行 set +e首先禁用 errexit,然后可以选择重新启用它。

关于python - 忽略 Bash 脚本中 Source 命令的失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757296/

相关文章:

python: `int`和 `float`的组合

linux - 在 linux 和 mac 机器上通过 ssh 登录运行 GNU Parallel

php - Shell 脚本命令 "ldap_search"无法与 php exec 或 shell_exec 命令一起使用

swift - macOS 菜单栏应用程序中禁用的菜单项

objective-c - 如何以编程方式在 MacOS 中隐藏全屏应用程序

python - Http header 用户代理

python - 按时间戳对 mongodb 文档进行排序(按降序排列)

python - 在 Python 中对日期列表进行排序

ruby - OS 10.9 上的 rvm 出现一些问题 : second export path to . bash_profile、缺少 2.0 路径和缺少文件

xcode - 导出 OS X 应用程序时指定配置文件