読者です 読者をやめる 読者になる 読者になる

くんすとの備忘録

プログラミングや環境設定の覚え書き。

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

FreeBSD Ruby Jail シェルスクリプト

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")

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

広告