Como o traço compatível é com o ksh?

1

Posso fazer com que /bin/sh seja vinculado a /bin/ksh em vez de /bin/dash sem quebrar nada no processo? Já que ambos devem ser compatíveis com POSIX, posso razoavelmente esperar que a substituição continue sem problemas?

    
por Sergiy Kolodyazhnyy 24.10.2017 / 09:54

1 resposta

1

/bin/sh foi bash por anos no Ubuntu e FWIW é ksh93 no mais recente versões do Solaris , então a maioria das coisas deve funcionar. Se alguma coisa, os modos POSIX em shells avançados como o ksh são mais liberais do que o dash, então alguns novos recursos ainda estão disponíveis:

~ for shell in dash bash ksh zsh; do ARGV0=sh POSIXLY_CORRECT=1 $shell -c 'echo -n $0 {a,b,c}; [[ -z $POSIXL_CORRECT ]] && echo typo'; done
sh {a,b,c}sh: 1: [[: not found
sh a b ctypo
-n sh a b c
typo
sh {a,b,c}typo
$ for shell in dash bash ksh zsh; do ARGV0=sh $shell -c 'echo -n $0 {a,b,c}; [[ -z $POSIXL_CORRECT ]] && echo typo'; done
sh {a,b,c}sh: 1: [[: not found
sh a b ctypo
sh a b ctypo
sh {a,b,c}typo

Eu não acho que nenhum script de um pacote no Ubuntu dependa da falta do traço da expansão de contraventamento. Uma varredura rápida de scripts no meu /usr/bin não mostra nada disso. Existem outros recursos modernos disponíveis nos modos POSIX do ksh e do bash, por isso é difícil prever sem realmente executar os scripts com esses shells.

No entanto, não vejo nenhum benefício em fazer /bin/sh ksh.

    
por muru 24.10.2017 / 10:18