BASH FAQ # 50: «Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!»
Невозможно указать имя файла с пробелом
Я очень новичок в написании сценариев и написании сценариев для проекта. У меня проблема при выполнении «stat» для имени файла, чтобы проверить размер, в котором есть пробелы. Проблема в том, что я не могу написать команду напрямую, и сначала я должен сохранить ее в переменной, а затем выполнить ее через эту переменную. Например, мой скрипт:
##test.sh ###Start OIFS=$IFS IFS=$'\n' filename=$1 a=stat b=-c c=%s d=$ CMD="$a $b $c $d" result=`$CMD` echo "Size is:"$result IFS=$OIFS ###END
Я установил IFS = $ '\ n', чтобы передать имя файла с пробелом в качестве параметра. когда я выполняю это, тогда я получаю:
[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt ./test.sh: line 9: stat -c %s dirLevel1/file Level1.txt: No such file or directory Size is:
Из-за IFS я думаю, что shell рассматривает команду как единое целое, не разбивая ее на части, и если я удаляю эту настройку IFS, то она говорит:
[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt stat: cannot stat `dirLevel1/file': No such file or directory stat: cannot stat `Level1.txt': No such file or directory Size is:
Поэтому он рассматривает параметр как два разных файла. Я не могу использовать "$ @" также потому, что получаю имя файла из какой-то другой логики перечисления файлов в каталоге, например
for i in 'find $ -type f' do calling the test.sh done
Пожалуйста, помогите мне как можно скорее .. !! Заранее спасибо....!!
2 ответа на вопрос
Я согласен с Игнасио: лучше всего придерживаться простых сценариев Bash. Исходя из этого, я упростил скрипт, чтобы он мог работать с пробелами. Чтобы позволить ему обрабатывать пробелы, включение имени файла в кавычки позволило скрипту иметь дело с пробелами в имени файла.
##test.sh ###Start result=`stat -c %s "$1"` echo "Size is:"$result ###END
Похожие вопросы
-
6
Какие функции Zsh вы используете?
-
8
Убийство Windows Shell
-
3
Mac OS X: обычные места, где должны жить бинарные файлы
-
-
2
Mac OS X: нужен простой скрипт
-
2
Как найти, а затем сравнить похожие файлы в папке Dropbox?
-
1
ksh эквивалент perl $! причина ошибки
-
3
Выясните, какой будет путь без символической ссылки?
-
4
Как запустить диалог свойств файла из командной строки?
-
2
Можно ли настроить несколько вкладок при запуске терминала?
-
2
разница между лам и пастой