2016-06-30 10 views
2

次のように私はbashでNFS場所からサーバとのパスを取得してい:cutとsed(cut:コマンドが見つかりません)を使用しているこのbashスクリプトで何が問題になっていますか?

#!/bin/bash 

ST="/net/10.111.111.111/path/to/some/dir" 
echo $ST 
SERVER=$(echo $ST | cut -d'/' -f3) 
echo $SERVER 
PATH=$(echo $ST | cut -d'/' -f4-) 
echo $PATH 
PATH=$(echo $ST | cut -d'/' -f4-) 
echo $PATH 

同じ2本のラインが目的で上記に繰り返されます。出力は:

/net/10.111.111.111/path/to/some/dir 
10.111.111.111 
path/to/some/dir 
./nn.sh: line 9: cut: command not found 

私は欲しいものを得ていますが、PATHへの2回目の呼び出しで上記のエラーが発生する理由はわかりません。私は何が欠けていますか?

答えて

6

PATHは、bashシェルが使用するシステム変数で、 バイナリ(たとえばcut)がどこにあるかを見つけるために使用します。

だから、まで:予想通り

PATH=$(echo $ST | cut -d'/' -f4-) 

事が働きます。しかし、コマンド置換の後、すなわち$(...)の場合、PATHは、bashが標準のバイナリを見つけられなかった非標準ディレクトリを指しています。彼らはシステム用に予約されているよう

は、スクリプトのための大文字の変数を使用しないでください

./nn.sh: line 9: cut: command not found 

教訓:

ので、後続のコマンド:

PATH=$(echo $ST | cut -d'/' -f4-) 

はあなたにエラーが発生しました。

+0

単なるアドオンとして、すでに予約されている変数には常に 'env'をチェックしてください。 –

+1

それは睡眠不足が何をすることができるのか驚くべきことです... – Lidia

+0

@Lidia:笑、非常にtrue ..私は最近、後の効果を感じた。 ;) – sjsam

関連する問題