我尝试了以下问题:
我正在运行docker-compose
检查 Dockerfile。
查看我的脚本:
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"
请注意,我也已经替换"$1 $2 $3"
为$@
or $*
。我也尝试$(echo "$@")
过$(echo "${@}")
我也已经在最后一个参数中替换了,但没有成功" "
。' '
例如,它剪切了参数的最后一部分,git p7zip wget unzip zstd
并且htop micro neofetch neovim zsh
不会安装整体。
您需要
-S
,--noconfirm
和--needed
包作为单独的参数传递给pacman
, 所以:Where
get_package_manager_install
将所有这些作为单独的参数传递,get_package_manager_install
并将它们按原样传递给pacman
.如果您只想
get_package_manager_install
使用 3 个参数,并且第二个和第三个要在空格字符上拆分以生成要传递给的参数列表,则pacman
可以使用 split+glob 运算符(由于忘记引用而错误地使用了该运算$1
符您的代码),在禁用 glob 部分并设置$IFS
为空格后:虽然我无法想象你为什么要这样做。
我也不清楚为什么要命名包含包管理器名称的变量,
archlinux
该名称是 Linux 发行版的名称。