くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

FreeBSD Jail環境でrbenvを使うと/dev/fd/62がないよってエラーが出るので無理やり対応した話

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
#!/usr/bin/env bash
# Usage: rbenv version-file-read <file>
set -e
[ -n "$RBENV_DEBUG" ] && 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's something crazy in it.
#  version=""
#  while read -a words; do
#    word="${words[0]}"
#    if [ -z "$version" ] && [ -n "$word" ]; then
#      version="$word"
#    fi
#  done < <( cat "$VERSION_FILE" && echo )
version=$(cat "$VERSION_FILE")

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

exit 1

該当部分はここで、

#  version=""
#  while read -a words; do
#    word="${words[0]}"
#    if [ -z "$version" ] && [ -n "$word" ]; then
#      version="$word"
#    fi
#  done < <( cat "$VERSION_FILE" && echo )
version=$(cat "$VERSION_FILE")

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

done < <( cat "$VERSION_FILE" && echo )

にあると思うのですが、

version=$(cat "$VERSION_FILE")

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