Já tentei as seguintes perguntas:
- Propagar todos os argumentos em um script de shell bash
- Como posso ecoar todos, exceto o último parâmetro no bash?
Eu estava executando docker-compose
que verifica o Dockerfile.
Veja meu roteiro:
archlinux="pacman"
get_package_manager_install()
{
if [[ -x "$(command -v $1)" ]]; then
"$1 $2 $3"
else
echo "Gestor do pacote desconhecido" &>/dev/null;
fi
}
get_package_manager_install "$archlinux" "-S --noconfirm --needed" "ca-certificates curl git p7zip wget unzip zstd"
get_package_manager_install "$archlinux" "-S --noconfirm --needed" "htop micro neofetch neovim zsh"
get_package_manager_install "$archlinux" "-S --noconfirm --needed" "luit xdotool xdriinfo xorg-appres xorg-iceauth xorg-xcmsdb xorg-xgamma xorg-sessreg xorg-xdpyinfo xorg-xev xorg-xfd xorg-xfontsel xorg-xhost xorg-xkbcomp xorg-xkill xorg-xlsatoms xorg-xlsclients xorg-xlsfonts xorg-xmessage xorg-xmodmap xorg-xprop xorg-xrandr xorg-xrdb xorg-xrefresh xorg-xset xorg-xvidtune xorg-xvinfo xorg-xwininfo"
Observe que também já substituí "$1 $2 $3"
por $@
ou $*
. Eu também tentei $(echo "$@")
e$(echo "${@}")
Eu também já substituí " "
no ' '
último parâmetro, mas sem sucesso.
Ele cortou a última parte do parâmetro, por exemplo, git p7zip wget unzip zstd
e todo htop micro neofetch neovim zsh
não será instalado.
Você precisa que
-S
,--noconfirm
e--needed
os pacotes sejam passados como argumentos separados parapacman
, então:Onde
get_package_manager_install
é passado todos aqueles como argumentos separados eget_package_manager_install
os passa como estão parapacman
.Se você quisesse
get_package_manager_install
pegar apenas 3 argumentos, e o segundo e o terceiro serem divididos em caracteres de espaço para gerar a lista de argumentos para passar parapacman
, você poderia usar o operador split+glob (que você já usou por engano esquecendo-se de citar$1
em seu código), depois de desabilitar a parte glob e definir$IFS
como espaço:Embora eu não possa imaginar por que você iria querer fazer isso.
Também não está claro para mim por que você nomearia a variável que contém o nome do gerenciador de pacotes,
archlinux
que é o nome de uma distribuição Linux.