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.txt
konten 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.txt
dan 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 basename
pada isi variabel $FILE
dan menyimpan hasilnya dalam variabel $filename
. Perhatikan tanda kutip ( "
) di sekitar $FILE
, mereka memastikan bahwa perintah bekerja untuk nama file yang berisi spasi. Akhirnya digunakan echo
untuk 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`)