FreeBSD Jail環境でrbenvを使用するとき、/dev/fdにfdescfsをマウントできてないとき、だと思っているのですが、こんなエラーが出ます。

>
    /usr/local/libexec/rbenv-version-file-read: line 23: /dev/fd/62: No such file or directory

どうも該当スクリプトをbashのシェルスクリプトで書いてるみたいなんですが、ファイルディスクリプタをちゃんと扱えてないっぽいせいで発生してるっぽいのです。※関連issue:unable to set global or or local ruby on freebsd · Issue #401 · sstephenson/rbenv · GitHubとりあえず力技で対処。

/usr/local/libexec/rbenv-version-file-read
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env bash
# Usage: rbenv version-file-read <file></file>
set -e
[ -n "$RBENV_DEBUG" ] &amp;&amp; set -x

VERSION_FILE="$1"

if [ -e "$VERSION_FILE" ]; then
  # Read the first non-whitespace word from the specified version file.
  # Be careful not to load it whole in case there&#39;s something crazy in it.
#  version=""
#  while read -a words; do
#    word="${words[0]}"
#    if [ -z "$version" ] &amp;&amp; [ -n "$word" ]; then
#      version="$word"
#    fi
#  done &lt; &lt;( cat "$VERSION_FILE" &amp;&amp; echo )
version=$(cat "$VERSION_FILE")

  if [ -n "$version" ]; then
    echo "$version"
    exit
  fi
fi

exit 1

該当部分はここで、

1
2
3
4
5
6
7
8
9
#  version=""
#  while read -a words; do
#    word="${words[0]}"
#    if [ -z "$version" ] &amp;&amp; [ -n "$word" ]; then
#      version="$word"
#    fi
#  done &lt; &lt;( cat "$VERSION_FILE" &amp;&amp; echo )
version=$(cat "$VERSION_FILE")

問題はここの読み込み部分

1
2
done &lt; &lt;( cat "$VERSION_FILE" &amp;&amp; echo )

にあると思うのですが、

1
2
version=$(cat "$VERSION_FILE")

と、直接バージョン情報を読むように変更しました。