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.

相关内容