2010-12-18 8 views
0

私は、特定のusbのマウントポイントを出力するUNIXシェル言語(bashやshの他のシェルではない)を記述したスクリプトを用意しています(つまり、/dev/sdb1)を引数として使用します)。ここでは、次のとおりです。シェルで文字列を印刷するのに問題があります

#!/bin/sh 
# usage: get_mount [path] 
# returns: mount pount of given usb path 

pth=$1 
echo $pth 
mountPoint="`df -h | grep $pth | tr -s \" \"| cut \"-d \" -f6`" 
echo $mountPoint 

問題は、私はこれを実行すると、それだけで、空白文字列を出力し、私は何の問題もなく、端末でそれを試してみたので、私は、コマンドの作品を​​知っている、である:それはちょうどそれを割り当てています変数には何が効いていないのですか?誰にでもアイデアはありますか?あらかじめThx!

+0

このスクリプトは、私のシステムの 'df -h'(/ dev/fd)にリストされている唯一のデバイスで動作しました。 'df -h'の出力の関連部分を投稿してください。 – DVK

+0

サンプル入力と希望する出力を教えてもらえますか?私は非常に確かに、特定の数のパラメータ拡張技法を使用して、trやcutの必要性を完全に取り除きます。 – SiegeX

答えて

2

をあなたは、単一引用符の有効利用だけでなく、二重引用符をすることによってあなたの人生を簡素化します:。

mountPoint="`df -h | grep $pth | tr -s ' ' | cut -d' ' -f6`" 

これをデバッグするための最初のステップは、cutコマンドを削除し、それが生成するかを確認することです。

mountPoint="`df -h | grep $pth | tr -s ' '`" 
echo $mountPoint 

それでも6(またはそれ以上)の列は印刷されますか?

コマンドの引数のスペルを間違えた場合、grepは何も入力せずにcutに渡されます。私のマシン上で

(Mac)を、私はdf -hからの出力を得る:

Filesystem  Size Used Avail Capacity Mounted on 
/dev/disk0s2 465Gi 189Gi 277Gi 41% /
devfs   111Ki 111Ki 0Bi 100% /dev 
map -hosts  0Bi 0Bi 0Bi 100% /net 
map auto_home 0Bi 0Bi 0Bi 100% /home 
/dev/disk1s1 1.8Gi 8.8Mi 1.8Gi  1% /Volumes/BLACKBERRY 

注ファイルシステムの名前のいくつかは、彼らにスペースを持っていること。それはあなたの問題の要因になることはまずありませんが、それは物事をオフにする可能性があります(マウントポイントはフィールド7です)。

+0

Solarisの場合、df -hはマウントポイントごとに2行の出力を表示します – DVK

+0

ありがとうございます!私は一重引用符も使用しようとしたことを覚えていますが、うまくいきませんでしたが、何らかの理由で今では...ありがとう! –

+0

@DVK:1 FSあたり2行の出力があるので、それも混乱しますが、OPはコマンドラインから動作すると言います... –

0
は-dの後にカットで-dの前に「\を移動し

mountPoint="`df -h | grep $pth | tr -s \" \"| cut -d \" \" -f6`" 
+1

それはそうではありません。その引用符は、フィールド区切り文字が空白であることを指定するのに役立ちます。 –

+0

私はそれを@Jonathanに修正しました。 –

+0

ええと...しかし '-d'の引数はそれに付けることができ、質問の元の表記は、' '-d''を使って空白を' -d'の引数として渡すことで達成されます。私は '' -d '' ''のように思っていますが、オリジナルはOKですが、自分のスクリプトで使う形ではありません。 –

関連する問題