21

Я возился в терминале в Red Hat Linux, и когда я набрал звездочку (*), а затем return, она запустила одну из программ в моем каталоге. Зачем?

Мое предположение заключается в том, что Unix воспринимал это как шаблон, поэтому он выполнил первую алфавитную программу. Поскольку my_program.exe и one_of_my_programs.program можно выполнить, просто введя имя файла, оператор подстановки представляет все возможные файлы. Поскольку программа сначала в алфавитном порядке, Unix выполняет ее. Это правильное суждение?

2 ответа2

21

Ваша интерпретация верна. Остальные файлы будут представлены в виде списка параметров.

Обратите внимание, что это будет сделано только в том случае, если в программе установлен исполняемый бит, а текущий каталог находится в списке PATH .

Несколько замечаний, которые могут помочь понять:-

  • Если вы ./* то запись PATH не обязательна.
  • Если вы печатаете . * или . ./* и первый соответствующий файл является скриптом, тогда он не должен быть исполняемым, а текущий каталог не должен быть в PATH (может быть неверно для оболочек, отличных от bash).
11

Это говорит об этом . является частью вашей PATH . Это действительно плохая идея по соображениям безопасности (естественно, Windows пришлось сделать его неизменяемым по умолчанию).

Тем не менее, это "предложение" является только умеренно допустимым: если у вас есть файл с именем rm в вашем текущем каталоге, * будет хорошо выполнить rm по умолчанию:

/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$ 
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm  what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$ 

Как видите, выполнялся не rm в текущем каталоге (пустой и неисполняемый файл), а системный стандарт /bin/rm .

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

rm: cannot remove '.o': No such file or directory

Это результат звонка

rm * .o

более или менее худшее расположение ложного пространства, которое можно придумать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .