Есть shell-скрипт с определенной логикой и в начале идет функция проверки необходимости запуска с правами администратора.
Я хочу, чтобы пароль администратора запрашивался в стандартном окне для ввода пароля (как например при установке .pkg-файлов) в macOS. Потому что скрипт будут выполнять разные пользователи, в том числе и те, кто увидят окно терминала первый раз в жизни и многие не понимают "как вводить пароль в терминале". Поэтому стандартное диалоговое окно удобнее.
В macOS можно вызвать диалоговое окно ввода пароля с помощью AppleScript и я написал вот такой скрипт для примера и проверки, запустится ли скрипт с правами админа:
#!/bin/bash
SCRIPT_DIR="$(dirname "$0")"
SCRIPT_NAME="$0"
SCRIPT_PATH="$(realpath "$0")"
function relaunchWithAdminRequest() {
CURRENT_USER=$(whoami)
echo "CURRENT_USER $CURRENT_USER"
if [ "$CURRENT_USER" != "root" ]; then
temp_script=$(mktemp "/tmp/temp.XXXXXX" 2>/dev/null)
cp "$SCRIPT_PATH" "$temp_script"
cat <<EOF > /tmp/testapplescript
tell application "Terminal" to do script "sh $temp_script"
EOF
osascript <<EOF
set scriptPath to POSIX path of "$temp_script"
do shell script "osascript /tmp/testapplescript" with administrator privileges
EOF
fi
}
relaunchWithAdminRequest
Терминал запускается предварительно запросив пароль администратора в стандартном диалоговом окне, но все равно у меня нет прав администратора в новом запущенном скрипте.
Вопрос:
Как в macOS из текущего shell-скрипта запустить другой shell-скрипт с правами администратора, получив эти права с помощью стандартного диалогового окна ввода пароля?