Почему 2 машины Linux ведут себя по-другому с командой того же синтаксиса?

На проблемной машине, в каталоге Вы grep 'something' * есть ли какие-либо специальные файлы как сокеты, именованные каналы (fifos), и т.д. там?

По крайней мере, в случае именованного канала, grep не получит EOF от именованного канала, пока что-то на самом деле не запишет EOF в именованный канал.

4
29.03.2012, 02:07
2 ответа

По умолчанию оболочки разворачивают подстановочные знаки, если файл соответствует им, но сохраните нерасширенными уникальный. Например, если Вы работаете touch /tmp/111; touch /tmp/11* это создаст и затем обновит mtime на/tmp/111, но если/tmp пуст, но Вы звоните touch /tmp/11* Вы получите файл, названный "11*" в/tmp.

Это - довольно странная функция оболочек. Иногда надлежащее расширение не возможно без специальных взломов как промежуточная функция. Актуальнейшие оболочки изобретают специальные опции для типичных случаев; например, "shopt-s failglob" в ударе отклоняет его от выполнения любой команды, где подстановочное соответствие перестало работать.

Каждый должен полагаться на подстановочное расширение находки, таким образом, такой шаблон должен быть заключен в кавычки против расширения в оболочке:

find /home/primbat/testing -name 'sftp_bcs_report_*.log' -type f -ctime +7

(отметьте одинарные кавычки). С нулем или одним файлом, это работает, но с двумя или больше файлами Вы получаете поврежденный синтаксис команды, и он жалуется - это - то, что сказано коллегой Arcege. Ваш "набор-f" отключает расширение полностью - хорошо, это - хорошая мера для диагностики, но может дать подводные грабли для будущего перемещения. Кавычки более просты:)

11
27.01.2020, 20:46

Кажется, что нет никакого соответствия файла sftp_bcs_report_*.log в начальном каталоге на второй машине и больше чем одном таком файле на первом сервере. Для использования find, шаблоны должны всегда заключаться в кавычки.

4
27.01.2020, 20:46

Теги

Похожие вопросы