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]~$ 

그런데 나는 우분투 13.10을 사용하고 있습니다

답변1

전체 경로를 사용하여 스크립트를 호출하는 것이 좋습니다: sudo /home/lucas/bin/term_multiscreen또는 sudo ~/bin/term_multiscreen. 이로 인해 sudo' 에 연결된 보안 위험이 발생하지 않습니다 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

관련 정보