ponto (.) ou comportamento de origem no bash quando o modo POSIX está definido (OS X)

1

Eu tentei verificar a diferença no comportamento do . (ou equivalentemente source ) incorporado. Estou usando o bash 3.2 no El Capitan. De acordo com a documentação , definindo o modo POSIX ( set -o posix ) deve evitar a pesquisa de shell no diretório atual quando . é emitido com um nome de arquivo que não contém / .

Eu estou no diretório tmp, onde myscript.sh (que ecoa "Hello") reside:

MacBook:tmp simone$ set | grep SHELLOPTS
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
MacBook:tmp simone$ . myscript.sh 
Hello
MacBook:tmp simone$ set -o posix
MacBook:tmp simone$ set | grep SHELLOPTS
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:posix
MacBook:tmp simone$ . myscript.sh 
Hello

Parece que o script no diretório atual é executado independentemente da configuração POSIX. Eu entendi mal alguma coisa ou há uma explicação mais sutil?

Como apontado nos comentários, o comportamento deve ser o descrito se . não estiver no PATH. Minha variável PATH contém a seguinte string:

/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

    
por simonstar 26.08.2017 / 19:58

1 resposta

0

É um bug que foi corrigido em uma versão subsequente. Do registro de alterações do bash :

This document details the changes between this version, bash-4.0-alpha, and the previous version, bash-3.2-release. (…)

1. Changes to Bash (…)

ggg. Fixed a bug that caused a shell running in Posix mode to search $PWD for a file specified as an argument to source/. when the file was not found in $PATH. (…)

iii. Fixed a bug that caused the shell to search $PATH for an argument to source/. even when it contained a /.

    
por 27.08.2017 / 00:58

Tags