2013-02-03 1 views
2

myscript.sh 내가 디렉토리 $ 1 루트가 소유 sudo는 ./myscript.sh으로 호출하므로 사용자가 (a.txt이를 수정할 수없는 경우sudo는 쉘 스크립트에서 mkdir

#/!bin/sh 
mkdir -p $1 
cp -p a.txt ./$1 
cp b.txt /usr 

인 문제입니다.) 나는

#/!bin/sh 
mkdir -p $1 
cp -p a.txt ./$1 
sudo cp b.txt /usr 

에 스크립트를 변경하고 단지 ./myscript.sh로 호출하지만이 나쁜 방법입니다 느낌을 얻을 수 있습니다. 어떻게하면 사용자를 알지 못하는 일반적인 경우에 진행할 수 있습니까? chown이 도움이되지 않습니다.

+0

환경 변수 $ USER에서 현재 사용자를 얻을 수 있습니다. 따라서 스크립트 내부에서 chown을 사용할 수 있습니다. – jitendra

+0

@jitendra : 스크립트를 호출하기 전에'USER = anybody'를 설정할 수 있습니다. 그러면 파일이 잘못된 사용자에게'chown'됩니다. –

+0

일반 파일을'/ usr'에 복사해서는 안됩니다. 정상적인 이벤트 과정에서 디렉터리 만 포함해야합니다. 왜'/ usr/b.txt' 파일을 원합니까? 당신이 두 개의 분리 된 작업을 잘못 묶어 두는 것처럼 내게 조금 보인다. –

답변

1

SUDO_USER 환경 변수는 sudo으로 sudo을 호출 한 사용자의 이름으로 설정됩니다. chown에 사용할 수 있습니다.

나쁜 관행으로는 파일 이름에 공백이있는 경우 아무 것도 확인하지 않고 $1 인수 대체가 끊어집니다. 그렇게 많은 것이 중요하지 않다면, 나머지는 신경 써야합니까?

+0

고마워, 네. – user2037986

1

당신은 이것으로이 라인

chmod ug+rw a.txt 

을 추가해야합니다, 사용자는 'a.txt이'에 대한 읽기/쓰기 권한을 것입니다.

+2

파일에 대한 쓰기 권한을 부여하는 것은 대개 잘못된 생각입니다. –