No busybox, o shell padrão é o ash, então alguns truques familiares no bash não estão disponíveis. Uma coisa que eu gostaria de fazer é expandir uma lista de letras, como {a..z}
, que se expandiria para a b c d e f g h i j k l m n o p q r s t u v w x y z
bash. Existe outra maneira de fazer essa cinza?
O
ash
shell não oferece suporte a expansões de colchetes.Usando Perl, você poderia fazer
onde o primeiro
\n
(emjoin()
) pode ser substituído pelo delimitador de sua escolha.Se você tiver o
jot
utilitário disponível,POSIXly (e com busybox) e em sistemas baseados em ASCII (acho que o busybox nunca foi encontrado em sistemas EBCDIC):
Expandiria para essa lista de letras, uma por linha, supondo que você não tenha modificado
$IFS
,seria uma maneira de passar essa lista como argumentos separados para
cmd
. Como você faria comksh93
//zsh
'bash
scmd {a..z}
.Isso dificilmente é uma melhoria sobre
no entanto. Para poder fazer o equivalente a
foo{a..z}bar
, você pode definir a:em vez disso e chame-o como:
Você pode expandir esse tipo de abordagem fazendo algo como:
E então faça:
(embora o último também possa ser escrito
seq -w 0004
)seq
não é um comando POSIX, masbusybox
vem com ele.Observe que o busybox
sh
é baseadoash
por padrão, mas pode, alternativamente, ser configurado no momento da compilação para usar umhush
shell baseado em que suporta expansão de colchetes. Mas isso é apenas o estilo csh{a,b}
, não o estilo zsh{1..10}
,{a..z}
ou as formas mais avançadas encontradas em ksh93/zsh/bash.Se a instalação do Busybox vier com o
hush
shell, você poderá usá-lo. Ele suporta expansões de cintas.