(WSL)(ruby) WSLの環境でpryを使うと最初にパーミッションの警告が出て五月蠅い場合
rubyに関する記事一覧→ rubyのまとめ
pryが出すメッセージの通り ディレクトリのパーミッションが777になっているのがあるのが原因です
指定したディレクトリ以下のディレクトリを一括して755にしてあげましょう
find /home/<ユーザ名>/.rbenv -type d -exec chmod 755 {} +
インストール直後だとrbenvでもrvmでも同じように警告が出されるので
まずは .rbenv や .rvm のディレクトリを指定してやりましょう
それ以外のケースだと
node.js の n などをインストールした後に同じ警告が出るケースがあります
もちろん上のコマンドを読み替えて
find /home/<ユーザ名>/n -type d -exec chmod 755 {} +
の様にすれば解決します
面倒ですがWSLの環境下では警告が出るたびに
関連のディレクトリに上のコマンドを実行してあげましょう
(ruby)(rbenv) rbenvでrubyをインストール
rubyに関する記事一覧→ rubyのまとめ
注意:
この記事の内容は ubuntu 17.10 lubuntu 17.10 Windows Subsystem for Linux(WSL) Fedora 27 CentOS 7 の環境で動作を確認しています、 その他の環境ではうまく行かない可能性がありますので予めご了承ください
rvmが入っている環境ならまずはrvmを除去します
rvm seppuku
でアンインストールして
.bashrc等に追加した source ~/.rvm/scripts/rvm の部分を削除してください
端末を再起動したのち rvmの環境が無くなったかを確認してください
ここから rbenvのインストール手順の本編です
githubから引っ張ってくるのが手っ取り早いです
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
.bashrcなどに以下を追加します
if [ -e $HOME/.rbenv ]; then export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" fi
ここで端末を一旦再起動します
rbenvが使えるようになったかを確認します
type rbenv
を実行して、以下のような結果が返ってきているならOKです
rbenv は関数です rbenv () { local command; command="${1:-}"; if [ "$#" -gt 0 ]; then shift; fi; case "$command" in rehash | shell) eval "$(rbenv "sh-$command" "$@")" ;; *) command rbenv "$command" "$@" ;; esac }
続けて rbenv install を使えるようにします
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
rbenv ins 位まで入れて Tabキーで rbenv install と補完されるようになっているならインストールに成功しています
続いて、rbenvでrubyをインストールする前に、rubyのビルドに必要な物をインストールします
(ここに書いているのはdebian/ubuntu系の方法です、その他の環境の場合は読み替えて対応するものをインストールしてください)
sudo apt-get install build-essential libssl-dev libreadline-dev zlib1g-dev
redhat系だとおそらく 以下のでおおよそ同等になるかと思います
sudo yum groupinstall 'Development tools' sudo yum install openssl-devel readline-devel zlib-devel
とりあえずの基本的な使い方は
rbenv install -list でインストール可能なバージョン一覧表示 rbenv install <バージョン> で指定したバージョンをビルドインストール rbenv versions でインストール済バージョン一覧表示 rbenv global <バージョン> で通常使用するバージョンを指定 rbenv local <バージョン> でそのディレクトリ内で使用するバージョンを指定 rbenv local --unset でローカルで使用するようにした設定を解除 rbenv uninstall <バージョン> で指定したバージョンをアンインストール
インストール可能なバージョンのリストを更新したい場合は
ruby-buildのあるディレクトリ(~/.rbenv/plugins/ruby-build) へ移動して
git pull
か
git fetch --prune git merge origin/master
などとして最新の状態にしてあげればOKです
(node.js)(javascript) 外部プログラムを呼び出して、それに標準入力をして、それの標準出力を取得する
node.jsに関する記事一覧→ node.jsのまとめ
今回想定したシチュエーションは、ちょっと特殊かもしれませんが
euc-jpの文字コードの文字列をutf-8に変換したいけどiconvだとなんかうまくいかないので
外部プログラムのnkfを使って変換したものをまたスクリプト側で取得したい
とします、まあ nkfの部分を色々と別のものに読み替えればいいだけですね。
#!/usr/local/bin/node // rubyと同じ感じでコンソールに出力できるように const puts = console.log; const print = (str)=>{process.stdout.write(str)}; // 外部プログラムを呼び出す準備 const exec = require('child_process').exec; // ファイル操作をする準備 const fs = require('fs'); // euc-jp.txt には euc-jpの文字コードで書かれた内容が入っているとします // 非同期モードだといろいろめんどくさいので readFileSyncの同期モードで読み込んでます // これで euc_textにeuc-jpの文字列データ(データ自体はUint8Arrayの状態)が入っている状態を作ります // (例えば requestで取得した「euc-jpで書かれたwebページ」の bodyのデータに相当します) var euc_text = fs.readFileSync('euc-jp.txt'); // nkfを使って utf-8 に変換したいので // 第一引数のコマンド部分は 'nkf -w -Lu' // -Luオプションを付けることで改行コードをLFで統一してくれます // 第二引数に外部プログラムの結果を受けるコールバック関数をセットします // 外部プログラムの標準出力は stdoutにセットされています const nkf = exec( 'nkf -w -Lu', (err, stdout, stderr)=>{ puts(stdout); } ) // 外部プログラムの標準入力に euc_textの内容を流し込みます nkf.stdin.write(euc_text); // 外部プログラムの標準入力を閉じます // これをやらないと終わりを待ち続けるのでスクリプトの実行が固まります nkf.stdin.end();