Napisałem funkcję w bashu, która pobiera * jako dane wejściowe i dlatego powinna wyświetlić wszystkie pliki w tym konkretnym katalogu. ale nie. Oto co napisałem:
# a function that mass deletes files in a directory but asks before deleting
yrm()
{
echo "The following files are going to be deleted:"
ls "${1}"
read -e -n 1 -p "Do you want to delete these files? Y/n" ANSWER
${ANSWER:="n"} 2> /dev/null
if [ $ANSWER == "Y" ]
then
rm $1
else
echo "aborted by user"
fi
}
Jednak przetestowałem go z tymi plikami:
l1zard@Marvin:~/.rclocal/test$ ls *
test1.txt test2.txt test3.txt test5.txt test7.txt test8.txt test9.txt testm7m767.txt
i otrzymuję ten wynik z mojej funkcji:
l1zard@Marvin:~/.rclocal/test$ yrm *
The following files are going to be deleted:
test1.txt
Do you want to delete these files? Y/nn
aborted by user
Jak mogę to naprawić, aby wyświetlał pliki zgodnie z oczekiwaniami?
linux
bash
shell-script
l1zard
źródło
źródło
Funkcja wygląda teraz tak i działa dzięki Scrutinizer:
źródło
*
jako parametr: powłoka rozszerza gwiazdkę przed wywołaniem funkcji. Zobacz rozszerzenia część podręcznika bash.