Не перезаписывайте $ PATH, если не знаете, что делаете.Эта переменная используется для поиска исполняемых файлов.
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Как сказал Гордон;вы должны поместить вывод find в массив вместо переменной.Обратите внимание на кавычки, иначе файлы с пробелами приведут к ошибкам.
ARRAY=("$(find . -name "my file.txt")")
for file in "${ARRAY[@]}"; do echo $file; done
Я позволил себе написать сценарий таким образом, что я думаю, что вы сможете изменить его в соответствии с вашими потребностями.Сценарий вроде как сам по себе, но не стесняйтесь задавать вопросы.Вам следует самостоятельно проверить некоторые ошибки ;-)
#! /bin/bash
IFS=$'\n'
FOUND=()
echo "Enter a blank filename to stop input"
while read -p "Enter a file name: " file; do
[ ! -z "${file}" ] || break
file_found=$(find ${HOME} -name ${file})
if [ -z "${file_found}" ]; then
echo "File '$file' not found"
continue
fi
FOUND+=(${file_found})
done
if [ ${#FOUND[@]} -gt 1 ]; then
echo "Multiple files found, make a choice."
for ((index=0; index<${#FOUND[@]};index++)); do
echo " -> $index = ${FOUND[$index]}"
done
echo " -> 0 1 .. n = Item 0, 1, .., n"
echo " -> * = Everything"
echo " -> Leave empty to abort"
read -p "Choice(s): " CHOICE
if [ -z "${CHOICE}" ]; then
echo "Nothing chosen, aborting"
elif [ "${CHOICE}" = "*" ]; then
chmod -v 400 ${FOUND[@]}
else
FILES=()
IFS=' '
for choice in ${CHOICE}; do
FILES+=("${FOUND[$choice]}")
done
chmod -v 400 "${FILES[@]}"
fi
elif [ ${#FOUND[@]} -eq 1 ]; then
chmod -v 400 $FOUND
else
echo "Not found"
exit 1
fi
exit 0
Примечание: я не думал об этом раньше, но вместо интерактивного использования сценария можно предоставить здесь документ:
$ ./test.sh << EOF
file1.txt
file 2.txt
*
EOF