Какова функция звездочки как отдельной команды в Unix?

Какова функция звездочки как отдельной команды в Unix?

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

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

решение1

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

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

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

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

решение2

Это говорит о том, что .это часть вашей 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

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

Связанный контент