В общем, в BASH вы сохраняете вывод команд в переменную одним из следующих способов:
foo=$(ls /usr)
или же
foo=`ls /usr`
Что касается вашего вопроса, если у вас есть файл с именем foo.txt
, содержимое которого выглядит так:
/usr/
/usr/games
/usr/games/cowthink
/usr/games/cowsay
/usr/games/fortune
/usr/games/enemylines7
/usr/games/enemylines3
/usr/lib32
/usr/lib32/libgdbm_compat.so.3.0.0
/usr/lib32/libfusion-1.2.so.9.0.1
тогда это должно делать то, что вам нужно:
while read FILE; do filename=`basename "$FILE"`; echo "$filename"; done < foo.txt
Если вместо этого вы хотите выполнить поиск определенного шаблона (например, "mynote") в файле, выполните:
grep mynote foo.txt|while read FILE; do filename=`basename "$FILE"`; echo "$filename"; done
ОБЪЯСНЕНИЕ:
while read FILE; do {something}; done < foo.txt
Эта команда читает каждую строку файла foo.txt
и сохраняет его содержимое в переменной $FILE
. Затем он выполняет {something}
один раз для каждой строки файла.
В этом случае {something}
является этой командой:
filename=`basename "$FILE"`; echo "$filename"
Он запускает basename
для содержимого переменной $FILE
и сохраняет результат в переменной $filename
. Обратите внимание на кавычки ("
) вокруг $FILE
, они гарантируют, что команда работает для имен файлов, содержащих пробелы. Наконец, он использует echo
для печати содержимого $filename
.
ОБНОВИТЬ:
Увидев ваш другой вопрос, я понимаю, что вы пытаетесь сделать. Что вам нужно, это:
filename=$(basename `grep $FILE CourseWork/paths`)