
Я возился в терминале на 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
, более или менее худшее размещение ложного пространства, которое только можно придумать.