Secara umum, dalam BASH Anda menyimpan output dari perintah ke variabel dengan salah satu cara berikut:
foo=$(ls /usr)
atau
foo=`ls /usr`
Adapun pertanyaan Anda, jika Anda memiliki file bernama foo.txtkonten yang terlihat seperti ini:
/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
maka ini harus melakukan apa yang Anda butuhkan:
while read FILE; do filename=`basename "$FILE"`; echo "$filename"; done < foo.txt
Sebaliknya, jika Anda ingin mencari pola tertentu (mis. "Mynote") dalam file lakukan:
grep mynote foo.txt|while read FILE; do filename=`basename "$FILE"`; echo "$filename"; done
PENJELASAN:
while read FILE; do {something}; done < foo.txt
Perintah ini membaca setiap baris file foo.txtdan menyimpan isinya ke dalam variabel $FILE. Kemudian dieksekusi {something}sekali untuk setiap baris file.
Dalam hal ini, {something}apakah perintah ini:
filename=`basename "$FILE"`; echo "$filename"
Itu satu berjalan basenamepada isi variabel $FILEdan menyimpan hasilnya dalam variabel $filename. Perhatikan tanda kutip ( ") di sekitar $FILE, mereka memastikan bahwa perintah bekerja untuk nama file yang berisi spasi. Akhirnya digunakan echountuk mencetak isi $filename.
MEMPERBARUI:
Setelah melihat pertanyaan Anda yang lain , saya mengerti apa yang Anda coba lakukan. Yang Anda butuhkan adalah ini:
filename=$(basename `grep $FILE CourseWork/paths`)