我有一个脚本编写了unix shell语言(不是在bash或任何其他shell中,在sh中),它打印给定usb的挂载点(即,它采用usb的路径(例如/ 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 :(得分: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)。
答案 1 :(得分:0)
将-d in cut之前的\“移动到-d。
之后mountPoint="`df -h | grep $pth | tr -s \" \"| cut -d \" \" -f6`"