2

Я очень новичок в написании сценариев и написании сценариев для проекта. У меня проблема при выполнении "stat" для имени файла, чтобы проверить размер, в котором есть пробелы. Проблема в том, что я не могу написать команду напрямую, и сначала я должен сохранить ее в переменной, а затем выполнить ее через эту переменную. Например, мой скрипт:

##test.sh
###Start
OIFS=$IFS

IFS=$'\n'

filename=$1

a=stat
b=-c  
c=%s
d=${filename}

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 ${arg} -type f'
do
calling the test.sh
done

Пожалуйста, помогите мне как можно скорее .. !! Заранее спасибо....!!

2 ответа2

0

Я согласен с Игнасио: лучше всего придерживаться простых сценариев Bash. Исходя из этого, я упростил скрипт, чтобы он мог работать с пробелами. Чтобы позволить ему обрабатывать пробелы, включение имени файла в кавычки позволило скрипту иметь дело с пробелами в имени файла.

##test.sh
###Start

result=`stat -c %s "$1"`

echo "Size is:"$result

###END

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .