В итоге я дал им два варианта на моей странице «Начало работы». Я кратко объясню, что делает сценарий установщика, например ищет ~ / .local / bin или тому подобное, а затем потенциально добавляет это в PATH в ~ / .zshrc или ~ / .bashrc. Я также даю им возможность установить вручную вместо использования сценария с простыми инструкциями для этого.
Чтобы запустить автоматический установщик, пользователь должен вставить и выполнить следующую команду:
curl -s https://thesite.com/installmycmd > /tmp/inst; source /tmp/inst
Это сценарий installmycmd:
#!/bin/bash
BASE="https://thesite.com"
declare -a binddirs
bindirs=($HOME/bin $HOME/.local/bin $HOME/.bin)
founddir="false"
findprofile() {
profiles=($HOME/.zshrc $HOME/.bashrc $HOME/.bash_login $HOME/.login $HOME/.profile)
for prof in "${profiles[@]}"; do
if [ -f "$prof" ]; then
echo "$prof"
return
fi
done
touch $HOME/.profile
echo "$HOME/.profile"
}
for bindir in "${bindirs[@]}"; do
if [ -d "$bindir" ]; then
founddir=true
echo "You have a user bin dir here $bindir."
whichprofile=$(findprofile)
pathline=$(grep ^PATH= $whichprofile)
if [[ ! $pathline == *$bindir* ]]; then
echo "Appending $bindir to PATH in $whichprofile"
echo -e "\nexport PATH=\$PATH:$bindir" >> "$whichprofile"
NEWPATH=$PATH:$bindir
export NEWPATH
else
echo "That is in your PATH in $whichprofile"
fi
break;
fi
done
if [ ! -z $NEWPATH ]; then
echo "Exported PATH: $NEWPATH"
export PATH=$NEWPATH
fi
if [[ "$founddir" == "false" ]]; then
echo "Could not find ~/.bin or ~/.local/bin or ~/bin."
echo "Creating ~/.local/bin and adding to PATH"
mkdir -p $HOME/.local/bin
bindir=$HOME/.local/bin
whichprofile=$(findprofile)
echo "Appending PATH edit to $whichprofile"
echo -e "\nexport PATH=$PATH:$HOME/.local/bin" >> "$whichprofile"
export PATH=$PATH:$HOME/.local/bin
fi
bash -c "curl -s $BASE/JSON.sh > $bindir/JSON.sh"
bash -c "curl -s $BASE/mycmd > $bindir/mycmd"
chmod ug+x $bindir/mycmd
chmod ug+x $bindir/JSON.sh
Просто установите в ~/bin/ (исторический де-факто стандарт для скриптов, устанавливаемых вручную) или ~/.local/bin/ (современный, квазиформальный, стандарт для скриптов, устанавливаемых не корневым менеджером пакетов). Обычно в удобных для пользователя дистрибутивах уже есть один или оба дистрибутива в $PATH.
Или, что еще лучше, интерактивно запросите у пользователя префикс установки.[1179532].
Самое лучшее на самом деле - это проверить записываемые каталоги и запросить, не найдены ли они.[1179676].
Если ваш скрипт установки состоит только из 3 строк, почему бы не попросить пользователя просто выполнить эти 3 строки? Они уже копируют и вставляют вашу команду [1180212]curl[1180213], и если сделать строку, которую они копируют и вставляют немного дольше, то можно просто сделать: