Em geral, no BASH você salva a saída de comandos para uma variável de uma destas maneiras:
foo=$(ls /usr)
ou
foo='ls /usr'
Quanto à sua pergunta, se você tiver um arquivo chamado foo.txt
cujo conteúdo é assim:
/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
então isso deve fazer o que você precisa:
while read FILE; do filename='basename "$FILE"'; echo "$filename"; done < foo.txt
Se, em vez disso, você quiser pesquisar um padrão específico (por exemplo, "mynote") no arquivo, faça:
grep mynote foo.txt|while read FILE; do filename='basename "$FILE"'; echo "$filename"; done
EXPLICAÇÃO:
while read FILE; do {something}; done < foo.txt
Este comando lê todas as linhas do arquivo foo.txt
e salva seu conteúdo na variável $FILE
. Em seguida, executa {something}
uma vez para cada linha do arquivo.
Nesse caso, {something}
é este comando:
filename='basename "$FILE"'; echo "$filename"
Ele executa basename
no conteúdo da variável $FILE
e salva o resultado na variável $filename
. Observe as aspas ( "
) em torno de $FILE
, elas garantem que o comando funcione para nomes de arquivos contendo espaços. Finalmente, usa echo
para imprimir o conteúdo de $filename
.
ATUALIZAÇÃO:
Depois de ver sua outra outra pergunta , entendo o que você está tentando fazer. O que você precisa é isto:
filename=$(basename 'grep $FILE CourseWork/paths')