Проблема печати строки в оболочке - PullRequest
0 голосов
/ 19 декабря 2010

У меня есть скрипт, написанный на языке оболочки Unix (НЕ в bash или любой другой оболочке, в 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

Проблема в том, что когда я запускаю это, он просто печатает пустую строку, и я знаю, что команда работает, потому что я попробовал ее в терминале без проблем: просто присвоение переменной является тем, что не работает. У кого-нибудь есть идеи? Спасибо заранее!

Ответы [ 2 ]

2 голосов
/ 19 декабря 2010

Вы упростите свою жизнь, эффективно используя как одинарные, так и двойные кавычки:

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 голосов
/ 19 декабря 2010

Переместите \ "перед -d в вырезе на -d после -d.

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