bash 스크립트에서 sudo 암호를 묻는 메시지가 표시되고 프로그래밍 방식으로 권한이 상승합니까?


49

현재 주식 리눅스 시스템 (현재 우분투)에 다양한 프로그램을 설치하고 설정하는 bash 스크립트를 작성 중입니다. 프로그램을 설치하고 높은 권한이 필요한 다양한 폴더에 여러 파일을 복사하기 때문에 이미 표준 "높은 권한이 필요합니다"를 종료했습니다.

그러나 가능한 경우 사용자가 sudo 암호를 입력하라는 메시지를 표시하고 사용자가 sudo로 스크립트 명령을 실행하지 않는 경우 (예 : GUI 파일 관리자에서 실행) 스크립트의 권한을 자동으로 높이고 싶습니다. 사용자가 스크립트를 다시 시작하지 않아도됩니다.

이것은 기본 Linux 설치에서 실행되도록 설계 되었기 때문에 시스템을 수정하는 옵션은 제 목적으로는 작동하지 않습니다. 모든 옵션은 스크립트 자체에 포함되어야합니다.

Bash 내에서 가능합니까? 그렇다면 가장 안전하고 간결한 방법은 무엇입니까?



@MichaelMrozek-아, 조각화를 최소화하면서 많은 틈새 사이트를 보유한 기쁨. 그리고 당신이 알다시피, 당신이 한 번도 제공 한 링크는 Google을 검색하는 동안 나에게 나타나지 않았습니다.
Shauna


@ jww 당신은 거의 모든 링크 가이 링크 약 4 년 후에 요청되었다는 것을 알고 있습니까?
Shauna

1
@Shauna-지금까지 문제를 해결했다고 생각합니다. 링크는 향후 방문자를위한 것입니다.

답변:


64

sudo스크립트에서 직접 실행 합니다.

if [ $EUID != 0 ]; then
    sudo "$0" "$@"
    exit $?
fi

16

나는 제안한다 :

#!/bin/bash

if (($EUID != 0)); then
  if [[ -t 1 ]]; then
    sudo "$0" "$@"
  else
    exec 1>output_file
    gksu "$0 $@"
  fi
  exit
fi

# some example stuff
ls -l /root
echo "app: $0"
for f; do
  echo ">$f<"
done

무엇을 if [[ -t 1 ]];확인합니까?
Shauna

그래. 터미널 대 GUI와 관련이 있다고 생각했지만 if 문 자체가 무엇을 확인하고 있는지 확신하지 못했습니다.
Shauna

정말 고마워요!
Fire-Dragon-DoL

16

이것을 스크립트의 첫 줄로 추가하십시오.

[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"

변경 sudogksu또는 gksudo당신은 그래픽 프롬프트를 선호하는 경우.


3
참고 "$*"하나에 모든 인수를 병합 할 것입니다은 ( /path/to/script one two three초래할 것입니다 $1있는 one two three), 그리고 $*따옴표 인수에 엉망 공간을 의지하지 않고. "$@"제대로 작동
Michael Mrozek

@MichaelMrozek 아, 맞아. 내가 찾던 것은 고정입니다
Kevin

sudo 명령이없는 데비안 에서이 작업을 수행 할 수있는 방법이 있습니까?
wrongusername

@ wrongusername install을 sudo사용하는 것보다 훨씬 낫습니다 su. 하지만 정말로 원한다면exec su -c "$0" "$@"
Kevin

2

예제 스크립트 나는 공유 상관 없어 ::

#!/bin/bash
[ "$UID" -eq 0 ] || exec sudo "$0" "$@" && echo -n "sudo bash what: "
read WHAT
sudo $WHAT

--ImP.TeK


[ "$UID" -eq 0 ] || exec sudo "$0" "$@"-정말 효율적인 하나의 라이너처럼 보입니다! 좋은!
groovenectar

여기서 효과적인 UID를 사용 $EUDI하거나 항상 같은 결과 를 사용하는 것이 합리적 입니까? 예 :[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"
groovenectar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.