Пример:
# echo $PATH
/home/admin*:*/bin
Я предполагаю, что это своего рода джокер, но глубина его один уровень или много?
Например, будет ли */bin
соответствовать только элементам в usr/bin
или также будет соответствовать более глубоким элементам в usr/local/bin
and /home/admin/bin
? И будет ли /home/admin*
соответствовать /home/administrator
и всему, что находится под ним, также на нескольких уровнях?
решение1
Что означает звездочка (*) в $PATH в UNIX?
# echo $PATH
/home/admin*:*/bin
Это значит, что у вас недействительный $PATH
.
$PATH
не поддерживает подстановочные знаки.
решение2
Этотдругой ответутверждает, что ваше $PATH
утверждение недействительно, но я с этим не согласен.
Это потому, что, по bash
крайней мере, это не вызовет никаких ошибок — ни когда вы его устанавливаете, ни когда оболочка пытается разрешить команду через $PATH.
В $PATH звездочка означаетбуквальный *
(звездочка).
То есть, естьНЕТВыполняется расширение подстановочных знаков, и на самом деле проверяется буквальный каталог /home/admin*
, который не существует, поэтому он его пропускает, и проверяется */bin
, который также игнорируется.
Тыможетсоздать каталоги с литералом *
в них (но... но...почему?).
И, если сделано, то этоволяпосмотри там; например, на '*/bin'
пути
Итак, это действительно будет работать с указанным вами значением $PATH:
cd /
mkdir \*
mkdir \*/bin
echo 'echo Hello from \"star\"/bin' > \*/bin/asterisk.bash
chmod 744 \*/bin/asterisk.bash
asterisk.bash
(Если вы хотите попробовать это в локальном каталоге, а не в корневом, просто не делайте cd
этого /
)
(Нетчто я рекомендую делать это дома. Сделайте это в гостях у друга :-)
Но поскольку вы, вероятно, все равно это сделали, ну, чтобы избавиться от нелепости, следующие три команды должны это сделать.
(Примечание: янет( Используется rm -r
на всякий случай, если вы допустили опечатку или оболочка, в которой вы находитесь, интерпретирует данные по-другому.)
rm \*/bin/asterisk.sh
rmdir \*/bin
rmdir \*