저는 설치 스크립트를 사용합니다. 다음은 두 가지 설치 명령입니다.
function InstallChrome()
{
if ( which google-chrome 1>/dev/null ); then
echo "Chrome is installed"
return
fi
echo "Installing Google Chrome ..."
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -O chrome
sudo dpkg -i chrome
echo "Installed Google Chrome"
}
그래서 기본적으로 설치된 프로그램을 검색 apt
하고 프로그램이 있으면 명령을 실행하지 않습니다 apt
.
apt
그 이유는 수표를 받는 것보다 훨씬 빠르기 때문입니다 .
그러나 이 코드는 작동하지 않습니다.
function InstallSshServer()
{
if ( which openssh-server 1>/dev/null ); then
echo "SSH Server is installed"
return;
fi
echo "Installing SSH Server ..."
sudo apt install openssh-server -y
echo "Installed SSH Server"
}
openssh-server
내 컴퓨터에 설치된 프로그램 이름은 무엇입니까? 설치되었는지 확인하는 방법은 무엇입니까?
답변1
openssh-server
설치 /usr/sbin/sshd
, 당신은 그것을 찾아야합니다. 패키지는 반드시 동일한 이름의 바이너리를 설치할 필요가 없으며 패키지가 설치하는 바이너리가 반드시 모든 사용자의 경로에 있을 필요는 없습니다. 따라서 명시적으로:
[ -x /usr/bin/sshd ] || sudo apt install -y openssh-server
dpkg -L
패키지가 설치되면 패키지가 설치된 파일이 무엇인지 알려줍니다. 다음 명령을 사용하여 바이너리를 나열할 수 있습니다.
dpkg -L openssh-server | grep bin/
apt-file list
패키지를 먼저 설치하지 않고도 패키지로 설치된 파일이 표시됩니다.
서술자로서," which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?스크립트에 대한 유용한 자료를 제공합니다.
답변2
내가 무엇을 할 것인가?세게 때리다:
if ! type -p sshd &>/dev/null; then
sudo apt-get install -y openssh-server
fi
답변3
다음은 비슷한 경우에 대해 제가 작성한 작은 스크립트를 수정한 것입니다.
#!/bin/bash
prompt_confirm() {
while true; do
read -r -n 1 -p "${1:-} [y/n]: " REPLY
case ${REPLY} in
[yY]) echo ; return 0 ;;
[nN]) echo ; return 1 ;;
*) printf " \033[31m %s \n\033[0m" "Incorrect input, please type y (yes) ou n (no)."
esac
done
}
# Check if openssh-server is installed
if ! command -v sshd &> /dev/null
then
echo -e "\nThe openssh-server is not installed."
if prompt_confirm "Would you like to install it now?";
then
apt install -y openssh-server
else
echo -e "\nOk, quitting.\n"
exit
fi
fi
물론 y/n 프롬프트 없이 체크 부분만 사용해도 됩니다.
command -v
시스템에서 명령을 사용할 수 있는지 테스트하는 데 권장되는 방법입니다.