Bash 脚本自动运行时无法正常工作

Bash 脚本自动运行时无法正常工作

我有一个脚本,可以根据连接自动设置代理,因此它位于 /etc/network/if-up.d/ 文件夹中。我使用 gsettings 工具设置代理,然后我想在桌面上显示通知。

我使用通知OSD如下:

notify-send -u 'critical' -i /home/vivek/Downloads/proxy.ico 'SetProxy Status' 'proxy set to auto'

脚本运行良好,因为我尝试将一些日志消息打印到文件中,这表明脚本正在运行,但是当我检查我的代理设置,系统设置->网络代理时,我没有看到任何明显的变化,我看到代理没有变化,虽然它实际上已经改变了[我检查了浏览器并且代理设置已应用],我也没有看到任何通知。

令人惊奇的是,如果我按如下方式明确运行脚本:

cd /etc/network/if-up.d/
sudo ./setproxy

我立即看到了通知,而且更改也反映在网络代理设置中。为什么会发生这种情况?我该如何解决这个问题?我使用的是 ubuntu 12.04 系统。

答案1

为了在多用户系统中保证安全,任何不在主文件夹中的内容都需要 root 权限才能执行。将代理设置脚本放在主文件夹中的一个特殊文件夹中,例如~/commandsPATH=$PATH:~/commands.bashrc

echo ‘PATH=$PATH:~/commands’ >> .bashrc

现在,每次运行setproxy任何其他命令(如lsdate)时,都会设置代理。只需sudo在脚本中添加即可避免权限冲突。


或者1:

本论坛解释暴发户使用起来非常简单。


选择2:

只需在您的系统上启用 root 帐户并始终使用该帐户。
警告:如果您不熟悉系统功能,这对系统来说是危险的,您很容易犯愚蠢或草率的错误,或者由于某种原因分心而在不知不觉中犯错误。

答案2

我建议将脚本添加到 /etc/bash_completion,每次打开终端时都会用到它,因为它包含在 ~/.bashrc 的末尾。或者,您也可以直接将脚本添加到 ~.bashrc 的末尾。如果您选择将其添加到 bash_completion,它应该包含以下行

. /etc/network/if-up.d/setproxy

你应该检查 ~./bashrc 以确保使用了 bash_completion(它位于文件末尾)。我的 ~./bashrc 的末尾看起来像

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi

这样你就可以确保 bash_completion 没有被注释掉。

相关内容