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')