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_multiscreensudo ~/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_path.然後,sudo將不會使用編譯選項,--with-secure-path.

相關內容