我正在运行一个脚本(在 tmuxinator 中),尝试获取另一个脚本(rvm)。 rvm 明确不允许从 sh 采购。我认为这不会成为问题,因为 tmuxinator 脚本中的 shebang 是
#!/bin/bash
但是当我插入 rvm 人员建议的代码以从脚本获取 rvm 时,
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
source "$HOME/.rvm/scripts/rvm"
fi
-我明白了
sh: 6: [[: not found
为什么在那里使用 sh 作为解释器?我还使用过 #!/usr/bin/zsh (这是我调用脚本的交互式 shell 中 $SHELL 的值)和 #!/usr/bin/env zsh,但它们给出了相同的抱怨。
答案1
RVM 是否在 /bin/sh 上下文中运行?这可能是您遇到此困难的原因;源脚本继承父级的解释器。看:http://ss64.com/bash/source.html
。 (源或点运算符)
从文件名参数中读取并执行命令当前 shell 上下文。
(强调我的)
答案2
看来问题是从 Ruby 调用脚本的
exec(script)
并且 exec 始终在 /bin/sh 上下文中运行,显然不管被调用脚本中的 shebang 行如何。
更改为
exec('/bin/bash', '-c', script)
作品。