Bash 스크립트는 소스 폴더 외부에 있을 때 "명령을 찾을 수 없음"을 반환합니다.

Bash 스크립트는 소스 폴더 외부에 있을 때 "명령을 찾을 수 없음"을 반환합니다.

내 디렉토리에는 /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. 이는 sudos와 관련된 보안 위험을 초래하지 않습니다 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_pathDefaults !secure_pathsudo--with-secure-path

관련 정보