2015-05-12 3 views
1

У меня есть сценарий, который ищет определенные места для файлов .txt и выводит результаты на stdout и в файл с помощью команды tee. По крайней мере, это должно быть. Однако у меня есть некоторые странные проблемы. Вот код:Найти команды не работают только в скрипте

echo -e "${HIGHLIGHT}Sensitive files:${OFF}" 
echo "## Sensitive files:" >> $ofile 
for file in $(cat $1); do ls -lh $file 2>/dev/null; done | tee -a $ofile 
echo " " | tee -a $ofile 
echo -e "${HIGHLIGHT}Suids:${OFF}" 
echo "## Suids:" >> $ofile 
find/-type f \(-perm -04000 -o -perm -02000 \) -exec ls -Alh {} \; 2>/dev/null | tee -a $ofile 
echo " " | tee -a $ofile 
echo -e "${HIGHLIGHT}Owned by root only:${OFF}" 
echo "## Owned by root only:" >> $ofile 
find/-type f -user root \(-perm -04000 -o -perm -02000 \) -exec ls -lg {} \; 2>/dev/null | tee -a $ofile 
echo " " | tee -a $ofile 

# Text files 
echo -e "${HIGHLIGHT}Text files:${OFF}" 
echo "## Text files:" >> $ofile 
find /etc -type f -name *.txt -exec ls -lh {} \; 2>/dev/null | tee -a $ofile 
find /home -type f -name *.txt -exec ls -lh {} \; 2>/dev/null | tee -a $ofile 
find /root -type f -name *.txt -exec ls -lh {} \; 2>/dev/null | tee -a $ofile 

Самое странное в том, что все команды работают нормально, на поиски находкой для .txt файлов в нижней части, за исключением. Ни одна из этих команд не работает в скрипте, но если я скопирую и вставляю их в терминал и запускаю его точно так же, как они были в скрипте, они работают нормально. Как это вообще возможно?

+0

Я настоятельно рекомендую инструмент shellcheck (который может быть установлен в автономном режиме или использоваться через Интернет в http://www.shellcheck.net/). Это может помочь вам указать на проблемы в сценариях оболочки, о которых вы, возможно, и не подозревали. Он предупреждает о ваших поисках поиска. «Задайте параметр для -name, чтобы оболочка не интерпретировала его». И это я думаю, где ваша проблема здесь. – user108471

ответ

3

Вам нужно указать или убрать * в ваших шаблонах -name, иначе оболочка попытается развернуть его и использовать развернутую форму на своем месте в командной строке.

find /etc -type f -name '*.txt' -exec ls -lh {} \; 2>/dev/null | tee -a $ofile 

и другие подобно будет работать

+0

О, как просто. Я должен был пробовать это. Благодарю. – user3408678

Смежные вопросы