sudo 권한을 사용하지 않고 git 설치를 자동화하려고 합니다. 좋은(그러나 느린) 해결 방법은 git과 함께 번들로 제공되며 xcode-select --install
표준 사용자가 호출 할 수 있는 Xcode를 설치하는 것입니다.
#!/bin/bash
# check if user has git installed
which git &> /dev/null
OUT=$?
sleep 3
# if output of git check is not 0(not foud) then run installer
if [ ! $OUT -eq 0 ]; then
xcode_dialog () {
XCODE_MESSAGE="$(osascript -e 'tell app "System Events" to display dialog "Please click install when Command Line Developer Tools appears"')"
if [ "$XCODE_MESSAGE" = "button returned:OK" ]; then
xcode-select --install
else
echo "You have cancelled the installation, please rerun the installer."
fi
}
xcode_dialog
fi
# get xcode installer process ID by name and wait for it to finish
until [ ! "$(pgrep -i 'Install Command Line Developer Tools')" ]; do
sleep 1
done
echo 'Xcode has finished installing'
which git &> /dev/null
OUT=$?
if [ $OUT = 0 ]; then
echo 'Xcode was installed incorrectly'
exit 1
fi
그러나 내 until
명령문은 완전히 무시되었으며 XCODE_MESSAGE
OK가 반환되자마자 git에 대한 두 번째 검사가 거의 실행됩니다. 설치 프로그램이 완료될 때까지 기다리는 논리를 더 잘 구현하는 방법을 아는 사람이 있습니까?
답변1
스크립트에서 따르는 접근 방식을 약간 변경하겠습니다. "git"이 있는지 확인하는 대신 설치 프로세스가 실행되고 있지 않은지 확인하세요.
#!/bin/bash
# check if user has git installed and propose to install if not installed
if [ "$(which git)" ]; then
echo "You already have git. Exiting.."
exit
else
XCODE_MESSAGE="$(osascript -e 'tell app "System Events" to display dialog "Please click install when Command Line Developer Tools appears"')"
if [ "$XCODE_MESSAGE" = "button returned:OK" ]; then
xcode-select --install
else
echo "You have cancelled the installation, please rerun the installer."
# you have forgotten to exit here
exit
fi
fi
until [ "$(which git)" ]; do
echo -n "."
sleep 1
done
echo ""
echo 'Xcode has finished installing'