Eu tenho um problema ao usar command -p mkdir
em um script de shell ksh93
.
O command -p
bit deve, de acordo com o POSIX ,
Perform the command search using a default value for PATH
that is guaranteed to find all of the standard utilities.
O manual ksh93
tem uma redação semelhante:
The -p
option causes a default path to
be searched rather than the one defined by the value of PATH
.
Functions will not be searched for when finding name. In
addition, if name refers to a special built-in, none of the
special properties associated with the leading daggers will be
honored. (For example, the predefined alias redirect='command exec'
prevents a script from terminating when an invalid
redirection is given.)
Eu reduzi meu script ao seguinte:
#!/usr/local/bin/ksh93 -x
echo "$PATH"
command -p mkdir t
Executando:
$ ./test.sh
+ echo /usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin
/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin
+ command -p mkdir t
./test.sh[3]: mkdir: not found [No such file or directory]
O valor padrão de $PATH
para ksh93
(de acordo com o manual) é /bin:/usr/bin:
e mkdir
é encontrado em /bin
:
$ command -v mkdir
/bin/mkdir
Se eu emitir o comando getconf PATH
no script (para obter o valor do padrão definido pelo sistema $PATH
), antes de chamar mkdir
, a chamada para mkdir
é bem-sucedida .
Isso é visto em ksh93
, "Versão AJM 93u + 2012-08-01", pelo menos no Ubuntu, OpenBSD, macOS e Solaris, e também afeta pelo menos cat
quando invocado da mesma maneira.
A pergunta: Eu senti falta de algo óbvio aqui?
Informações adicionais:
O comando builtin
em ksh93
lista vários utilitários sob o caminho (inexistente) /opt/ast/bin
. Isso tem algo a ver com isso?
$ builtin
:
.
[
/opt/ast/bin/basename
/opt/ast/bin/cat
/opt/ast/bin/chmod
/opt/ast/bin/cmp
/opt/ast/bin/cut
/opt/ast/bin/dirname
/opt/ast/bin/getconf
/opt/ast/bin/head
/opt/ast/bin/logname
/opt/ast/bin/mkdir
/opt/ast/bin/sync
/opt/ast/bin/uname
/opt/ast/bin/wc
alarm
alias
(etc.)
UPDATE: também enviei esta consulta para a lista de discussão ast-users
.