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")
と、直接バージョン情報を読むように変更しました。