
我正在運行一個腳本(在 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)
作品。