내 디렉토리에는 /home/lucas/bin
다음 스크립트가 있습니다 term_multiscreen
.
[lucas@lucas-ThinkPad-W520]~$ sudo cat bin/term_multiscreen
#!/bin/bash
# Initializes Nvidia Optimus for multi-screen functionality.
xorg_process=$(ps aux | grep 'Xorg' | grep -v grep | awk '{print $2}')
sudo kill -15 $xorg_process
sudo rmmod nvidia
sudo tee /proc/acpi/bbswitch <<<OFF
# xrandr --output VIRTUAL1 --off
[lucas@lucas-ThinkPad-W520]~$
내가 할 때 cd ~/bin
, 그것은 잘 실행됩니다 sudo term_multiscreen
. 내가 해당 디렉토리 외부에 있을 때 반환됩니다 command not found
. /home/lucas/bin
내 것도 거기에 있습니다 $PATH
. 내가 뭘 잘못했나요?
그런데 내 권한은 다음과 같습니다.
[lucas@lucas-ThinkPad-W520]~$ ls -la bin/
total 44
drwxr-xr-x 2 lucas lucas 4096 May 6 15:43 .
drwxr-xr-x 71 lucas lucas 4096 May 6 15:43 ..
-rwx--x--x 1 root root 137 Mar 2 03:26 init_multiscreen
-rw-r--r-- 1 lucas lucas 0 Mar 2 03:24 init_optimus~
-rwx--x--x 1 root root 260 Mar 2 05:54 term_multiscreen
[lucas@lucas-ThinkPad-W520]~$
그런데 저는 Ubuntu 13.10을 사용하고 있습니다.
답변1
전체 경로를 사용하여 스크립트를 호출하는 것이 좋습니다: sudo /home/lucas/bin/term_multiscreen
또는 sudo ~/bin/term_multiscreen
. 이는 sudo
s와 관련된 보안 위험을 초래하지 않습니다 secure_path
.
물론 입력이 너무 길므로(관리자는 게으르다) 별칭에 입력하세요 ~/.bashrc
.
alias tmulti="sudo $HOME/bin/term_multiscreen"
그런 다음 ~.bashrc
테스트를 다시 로드합니다.
. ~/.bashrc
tmulti
항상 호출 스크립트를 사용하는 경우 스크립트에서 호출을 sudo
제거할 수도 있습니다 .sudo
답변2
우분투?
별칭을 일반 사용자로 정의합니다: alias sudo='sudo env PATH=$PATH'
.
또는 를 실행하여 로 sudo visudo
변경합니다 . 그러면 컴파일 옵션이 사용되지 않습니다 .Defaults secure_path
Defaults !secure_path
sudo
--with-secure-path