除了 shebang 之外,還可以設定解釋器嗎?

除了 shebang 之外,還可以設定解釋器嗎?

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

作品。

相關內容