O que significa o asterisco "*" em uma variável de ambiente PATH unix?

O que significa o asterisco "*" em uma variável de ambiente PATH unix?

Exemplo:

# echo $PATH
/home/admin*:*/bin

Presumo que seja algum tipo de curinga, mas tem um nível de profundidade ou muitos?

Por exemplo, */bincorresponderá apenas aos itens em usr/binou também aos itens mais profundos em usr/local/bin and /home/admin/bin? E vai /home/admin*combinar /home/administratore tudo o que está abaixo dele, também em vários níveis?

Responder1

O que significa asterisco (*) em um $PATH unix?

# echo $PATH
/home/admin*:*/bin

Isso significa que você tem um arquivo $PATH.

$PATHnão suporta curingas.

Responder2

Esseoutra respostaafirma que o seu $PATHé inválido, mas discordo.

Isso porque, pelo bashmenos, ele não causará nenhum erro - seja quando você o configura ou quando o shell tenta resolver um comando via $PATH.

Em $PATH, um asterisco significa umliteral *(asterisco).

Ou seja, existeNÃOa expansão curinga foi executada e, na verdade, está verificando o literal directory /home/admin*, que não existe, então ele o ignora e verifica */bin, que também é ignorado de forma semelhante.


Vocêpodecrie diretórios com um literal *neles (mas... mas...por que?).
E, se feito, entãovaiolhe ali; por exemplo, no '*/bin'caminho

Então, isso realmente funcionaria com o valor $PATH fornecido:

cd /
mkdir \*
mkdir \*/bin
echo 'echo Hello from \"star\"/bin' > \*/bin/asterisk.bash
chmod 744 \*/bin/asterisk.bash

asterisk.bash

(Se você quiser experimentar em um diretório local em vez de root, apenas não cdentre /)
(Nãoque eu recomendo fazer isso em casa. Faça na casa de um amigo :-)

Mas já que você provavelmente fez isso de qualquer maneira - bem, para se livrar do ridículo, os três comandos a seguir devem resolver.
(Obs.: eu sounãousando rm -rapenas no caso de algo ser digitado incorretamente ou o shell em que você está interpretando as coisas de maneira diferente.)

rm \*/bin/asterisk.sh
rmdir \*/bin
rmdir \*

informação relacionada