Как мне заставить все мои терминалы / оболочки перезагружать свою среду, запустив скрипт? - PullRequest
2 голосов
/ 13 октября 2011

Я использую свой макинтош дома и на работе. И я использую программу под названием Marco-polo, чтобы определить, нахожусь ли я дома или на работе. Благодаря этому я могу запустить скрипт, который меняет мой прокси-сервер, и запустить некоторые скрипты, чтобы настроить мой компьютер по-разному для разных сред, таких как копирование hosts.work и hosts.home поверх / etc / hosts и копирование .profile.work и. profile.home over ~ / .profile.

То, что я до сих пор не смог сделать успешно, - это найти способ заставить все мои работающие терминалы перезагружать мой файл .profile, когда я меняю местоположение. Кто-нибудь может предложить метод для этого?

Спасибо, Том


Ответ fm48 ниже в сочетании с этим простым сценарием (помещенным в / usr / bin / pkill) сработал отлично.

#!/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 ]

9 голосов
/ 13 октября 2011

Вы должны использовать такой сигнал, как SIGUSR1.Сначала включите сигнал для перезагрузки ~ / .profile с trap ". ${HOME}/.profile" SIGUSR1.

. После этого вы должны отправить все оболочки сигнала SIGUSR1.Например, pkill -SIGUSR1 bash, если bash - используемая оболочка.

0 голосов
/ 13 октября 2011

Если вы принимаете Screen в качестве диспетчера терминалов, вы можете отправлять команды всем своим оболочкам с помощью:
screen -X at \# stuff "whatever command\n"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...