gpt4 book ai didi

Linux : NetworkManager's/etc/NetworkManager/dispatcher. d/test 脚本不起作用。包含代码

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:46 30 4
gpt4 key购买 nike

根据信息,其中的任何文件

/etc/NetworkManager/dispatcher.d/

假设从

接收 2 个可能的命令
NetworkManager

要找出这些命令可能是什么,我们只需
查看已存在的脚本之一的源代码

/etc/NetworkManager/dispatcher.d/

那么我们就这么做吧。

cd     /etc/NetworkManager/dispatcher.d/
ls
00-netreport 05-netfs 10-dhclient
vi 00*

这里什么都没有。

gedit 05*

非常好。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "down" ]; then
/sbin/ip route ls | grep -q ^default || {
[ -f /var/lock/subsys/netfs ] && /etc/rc.d/init.d/netfs stop || :
} && { :; }
fi

if [ "$2" = "up" ]; then
/sbin/ip -o route show dev "$1" | grep -q '^default' && {
/sbin/chkconfig netfs && /etc/rc.d/init.d/netfs start || :
} || { :; }
fi

让我们复制它并创建一个名为的文件

 test

让我们只使用我们需要的“up”。

file: test


#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
/sbin/ip -o route show dev "$1" | grep -q '^default' && {
/sbin/chkconfig netfs && /etc/rc.d/init.d/netfs start || :
} || { :; }
fi

让我们修改它,以便它可以“直观地”执行一些我们可以用来测试的东西。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
gedit test.txt
fi

结果:

Not Working.

让我们以某种方式修改它,以便它可以理解。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
/sbin/ip -o route show dev "$1" | grep -q '^default' && {
gedit test.txt || :
} || { :; }
fi

正在重新启动..

结果:

nothing

已解决:

这是所选答案中可能的最小代码:
(我能够创建)

case "$2" in
up)
touch /root/Desktop/ooo
;;
esac

我需要缩小它,因为我经常重新格式化我的机器,然后运行脚本来自动设置这些东西。所以将来我只会运行

cat >> /etc/NetworkManager/dispatcher.d/test << EOF
case "\$2" in
up)
touch /root/Desktop/ooo
;;
esac
EOF
chmod +x /etc/NetworkManager/dispatcher.d/test

换句话说, $ 必须用“cat>> ”来转义。

最佳答案

以下是 NetworkManager 连接时运行的脚本的工作示例:

#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs ifupdown scripts when NetworkManager fiddles with interfaces.
# See NetworkManager(8) for further documentation of the dispatcher events.

if [ -z "$1" ]; then
echo "$0: called with no interface" 1>&2
exit 1;
fi

# Run the right scripts
case "$2" in
up|vpn-up)
logger -s "HELLO THIS IS YOUR SCRIPT"
cd /home && touch "HELLOFILE.txt"
;;
down|vpn-down)
;;
hostname|dhcp4-change|dhcp6-change)
# Do nothing
;;
*)
echo "$0: called with unknown action \`$2'" 1>&2
exit 1
;;
esac

将脚本命名为您喜欢的任何名称,使其可执行,然后将其放入 /etc/NetworkManager/dispatcher.d/ 目录中。

您可以通过打开终端并运行来验证这是否有效:

sudo tail -f/var/log/syslog//打印系统日志直到取消

然后打开另一个终端,然后运行:

sudo service network-manager restart//重新启动NetworkManager

您应该会在日志中看到“HELLO THIS IS YOUR SCRIPT”字样,以及许多其他信息。并且该文件应添加到 /home 目录中。

我不确定为什么打开 gedit 的具体情况不起作用,但这是网络管理器启动时运行脚本的方式。我的猜测是,问题的其余部分与以下事实有关:脚本以 root 身份运行,但您希望 gedit 在特定用户(您)的桌面环境中打开。祝你好运!

关于Linux : NetworkManager's/etc/NetworkManager/dispatcher. d/test 脚本不起作用。包含代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848021/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com