kei0425tan’s blog

技術的なことを主に

nvmを入れたらscpが動かなくなったときの対処

久しぶりにホスト間でファイルをコピーしようとして、scpを使ってみたら、うまくコピーできなくなっていました。

どういうこと?

scpを実行すると謎?のメッセージが出力されてどうもコピーされていないようです。

$ scp hostname:/home/user/filename .
Now using node v8.2.1 (npm v5.3.0)
$

進捗がでないし、ログインしたときに表示されるnvmのメッセージが表示されています。

どうして?

nvmをインストールするときに、一般的に以下のコマンドを利用します。

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash

これを実行すると、.bashrcに自動的に以下が追加されます。

# nvm
if [ -s ~/.nvm/nvm.sh ] ; then
source ~/.nvm/nvm.sh
nvm use default
fi

一方、scpを実行すると、内部でシェルが起動されるため、.bashrcを実行します。
そのため、nvm use defaultが実行され、「Now using node v8.2.1 (npm v5.3.0)」が表示されてしまいます。
SCPはシェル実行時に標準出力があるとそれを表示して動作を停止してしまう仕様のようです。

どうすれば?

ようするに、シェル実行時に標準出力がなくなればよいのです。

標準出力しない

「Now using node v8.2.1 (npm v5.3.0)」を出力するのは、nvm use defaultです。なので以下のようにしましょう。

# nvm
if [ -s ~/.nvm/nvm.sh ] ; then
source ~/.nvm/nvm.sh
nvm use default > /dev/null
fi

.bash_profileに移す

上記でもよいのですが、そうすると普通にログインした時に、nodeのバージョンが表示されません。
別に表示されなくてもほとんど困らないのですが、せっかく今まで表示されていたので普通に表示させたいですよね。
なので、該当箇所を.bash_profileにそっくり移動してあげましょう。



※ この前ネットサーフィンしてみたら、このフォーマットで書くと分かりやすいとのことだったのでパクってみました!