Existe alguma maneira mais eficiente de fazer o seguinte no zsh?
Imagino que possa haver maneiras de se livrar dos parâmetros intermediários da matriz a
e/ou b
.
O script obtém alguma saída de um comando. Se essa saída não estiver vazia, ela pula as duas primeiras linhas e, em seguida, usa como argumentos para outro comando o texto antes do primeiro espaço em cada uma das linhas restantes.
#!/usr/bin/env zsh
packages=$(pip3 list -o)
if [[ -n ${packages} ]]; then
print "${packages}"
a=("${(f)packages}")
b=("${a[@]:2}")
PYTHONWARNINGS=ignore:DEPRECATION pip3 install -U "${b[@]%% *}"
fi
seria mais curto e um pouco mais parecido com o zsh, mas duvido que seja muito mais rápido.
Você pode querer usar
pip
's--format=freeze
para evitar ter que remover o cabeçalho (fornece uma saída empackage==1.2.3
formato para o qual você precisaria alterar${packages%% *}
para${packages%==*}
).