2017-05-24 20 views
0

誰かがこの質問やその近くのものを既に尋ねているが、私はそれに近いものは見つけられなかったが、それは私の弱点のためかもしれない。未確認の改行

私は、このスクリプトはbashを持っている:

... 
... 
## Read n line in vmlist 
VMTORESTORE=$(sed -n "$yn p" ./vmlist) 
## Replace " " between names by "\ " 
VMTORESTORE="$(echo "$VMTORESTORE" | sed 's/ /\\ /g' )" 
## Test variable 
echo $VMTORESTORE 
## Run Command 
ls -1 /vmfs/volumes/BACKUP_SAN/$VMTORESTORE | sed 's/ /\\ /g' 

これが結果です:

保存\カメラ

LS:/ VMFS /ボリューム/ BACKUP_SAN /割引:そのようなファイルや ディレクトリ

カメラ:

エコーが良い結果を出した理由はわかりませんが、コマンドはSave \とCameraの間に改行を挿入します。

ご協力いただきありがとうございます。

PROC

+0

「ls:/ vmfs/volumes/BACKUP_SAN/Save \:そのようなファイルやディレクトリはありません」というエラーはありませんか? – 123

答えて

0

ありがとう、私は簡単な解決策は期待していませんでした。 あなたは正しく、二重引用符が必要でした。

しかし私のカスでは、これでは十分ではありませんでした。 検索フォルダのパスした

「/ VMFS /ボリューム/ BACKUP_SAN /保存カメラ/」Linuxの中

が、通常、私はそのようなスペースの前に\を置く必要があるフォルダのこの種到達する:

「/ VMFS /ボリューム/ BACKUP_SAN /保存\カメラ/」私は「と」私のスクリプトのすべて「に置き換えられている理由

\」

しかし、であるが、これはそれほど必要とされていないbashスクリプトに思えますこれは魅力のように機能します:

... 
... 
## Read n line in vmlist 
VMTORESTORE=$(sed -n "$yn p" ./vmlist) 
## Run Command 
ls -1 "/vmfs/volumes/BACKUP_SAN/$VMTORESTORE" 

これは単純ですが、私は合併症を検索しました。

ありがとうございました。

2

のように、変数を引用するのは良いアイデアです:

ls -1 "/vmfs/volumes/BACKUP_SAN/$VMTORESTORE" 

は良い練習としてこれを取り、必要な場所にスクリプトを更新します。

+0

ファイル名にバックスラッシュがあるので、これはまだ動作しません。 – 123

+0

はい、これを行うのは、スペースをエスケープするためにバックスラッシュを追加する代わりに*正しい解決法*です。 – chepner

0

これは、\がbashのエスケープ文字であるために発生しています。あなたのパスは、\ではなく/であり、位置はsave/cameraです。また、" "のないコマンドを使用している場合は、" "のアドレスを使用するとグロビングが発生します。