如何通过运行脚本让我的所有终端/ shell重新加载他们的环境?

时间:2011-10-13 13:13:10

标签: macos bash terminal profile reload

我在家里和工作中使用我的mac。我使用一个名为Marco-polo的程序来检测我是在家还是在工作。通过这个,我可以让它运行一个脚本来更改我的代理并运行一些脚本来为不同的环境配置我的计算机,例如将hosts.work和hosts.home复制到/ etc / hosts并复制.profile.work和。 profile.home over~ / .profile。

到目前为止,我无法成功完成的工作是找到一种方法让我的所有正在运行的终端在我更改位置时重新加载我的.profile文件。有谁能建议这样做的方法?

谢谢,汤姆


下面结合这个简单的脚本(位于/ usr / bin / pkill)的fm48回答非常有效。

#!/bin/sh
sig=""
if [[ "$1" =~ - ]]; then
  sig=$1;
  shift
fi

for X in `ps acx | grep -i $1 | awk {'print $1'}`; do
    kill $sig $X;
done

2 个答案:

答案 0 :(得分:9)

您应该使用SIGUSR1之类的信号。首先启用信号以trap ". ${HOME}/.profile" SIGUSR1重新加载〜/ .profile。

之后你应该发送SIGUSR1信号的所有shell。例如pkill -SIGUSR1 bash如果bash是使用过的shell。

答案 1 :(得分:0)

如果您采用Screen作为终端管理器,您可以使用以下命令向所有shell发送命令:
screen -X at \# stuff "whatever command\n"