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 .