Как автоматически обновлять прокси-переменную $http _во всей системе при сетевом подключении?

Шаг 1. )Создайте список всех применимых каталогов, отсортируйте его в алфавитно-цифровом порядке и убедитесь, что нет дубликатов. Сохраните список во временном файле:

find /work/user/folder1/ [...] -type d | sort | uniq > all_directories.txt

Шаг 2. )Создайте список всех *.gridфайлов.

find /work/user/folder1/ [...] -name *.grid > grid_files.txt

Шаг 3. )Проработайте список *.gridфайлов, возьмите имя каталога каждого файла и снова убедитесь, что нет дубликатов:

while read FILENAME
do
    echo $(dirname "$FILENAME")
done < grid_files.txt | sort | uniq > dirs_with_gridfiles.txt

Шаг 4. )Запустите эти два списка вместе и снова отсортируйте результат. Теперь каталоги с *.gridфайлами должны быть перечислены ровно дважды каждый, а каталоги без *.gridфайлов ровно один раз каждый. Таким образом, вы можете указать uniqсообщать только о неповторяющихся -строках:

cat all_directories.txt dirs_with_gridfiles.txt | sort | uniq -u > dirs_with_no_gridfile.txt

Вот и получишь.

0
10.05.2021, 03:49
2 ответа

Вы должны указать Source -Call your file (точка перед вызовом файла ):../myfile.sh

Обычно файлы получают только копию родительской среды, и после закрытия сеанса дочерний -процесс в среде теряется

0
28.07.2021, 11:33

Обновление файла WPAD должно работать нормально для браузеров с графическим интерфейсом, таких как Firefox (, если они настроены на его использование ).

Командные -линейные инструменты, такие как lynx, wgetили curl, намного сложнее:

  • Они не могут использовать файлы PAC или WPAD
  • Вы не можете изменить переменные окружения даже в родительском процессе, не говоря уже о глобальных изменениях.
  • И нет никакого способа указать оболочке -переименовывать исходный файл при его изменении.

За исключением того, что есть способ сделать последний пункт. По крайней мере, в bash. Вы можете использовать переменную PROMPT _COMMAND, чтобы сообщить bashисточник сценария каждый раз, когда он отображает приглашение оболочки. Например:

Измените свой скрипт, чтобы он выводил *_настройки прокси-переменных в файл, например. /var/tmp/proxy-settings.sh. Убедитесь, что файл доступен для чтения всем -с chmod a+r.

что-то вроде:

cat <<__EOF__ > /var/tmp/proxy-settings.sh
export http_proxy="http://$router:8080"
export https_proxy="https://$router:8080"
export ftp_proxy="http://$router:8080"
EOF

Затем напишите сценарий оболочки для источника этого файла, если он изменился, сохраните его как, например, /usr/local/bin/update-proxy-vars.sh. Опять же, это должно быть удобочитаемо(chmod a+r). Он не обязательно должен быть исполняемым, потому что он будет исходным, а не выполненным :

.
# each individual shell needs it's own timestamp, because each one will
# read the proxy settings file at different times.
mkdir -p /tmp/.proxy-timestamps

tsfile="/tmp/.proxy-timestamps/time/var/tmp/proxy-settings.sstamp.$$"
if [ -e "$tsfile" ] ; then
  timestamp=$(< "$tsfile")
fi

# get the timestamp of the proxy-settings.sh file
# not all versions of `stat` can do this, and those that do
# have different and incompatible options.  The following works
# for GNU `stat`.
proxy_timestamp=$(stat -c %Y /var/tmp/proxy-settings.sh)

# has the timestamp changed?  if so, source the file.
if [ "$timestamp" != "$proxy_timestamp" ] ; then
 . /var/tmp/proxy-settings.sh
  echo "$proxy_timestamp" > "$tsfile"
fi

Наконец, установите PROMPT _COMMAND, чтобы вызывать этот сценарий каждый раз, когда он отображает приглашение.

PROMPT_COMMAND='. /usr/local/bin/update-proxy-vars.sh'

Вы также должны запустить rm -f /tmp/.proxy-timestamps/timestamp.$$в своем ~/.bash _сценарии выхода из системы, чтобы навести порядок после выхода из bash.just

Это, IMO, уродливый и неприятный хак, и он замедляет bash(, что не демон скорости для начала ), потому что он должен запускать update-proxy-vars.shкаждый раз, когда он отображает подсказку. Каждый раз, когда вы запускаете команду. Или просто нажмите Enter без команды. При каждом запросе ему придется запускать этот скрипт, читать файл временных меток, запускать stat, сравнивать временные метки и, возможно, использовать другой файл, если временная метка изменилась.

Вероятно, было бы быстрее каждый раз просто использовать источник /var/tmp/proxy-settings.sh, если он существует, независимо от того, изменился он или нет,и не заморачиваться с отметками времени.

Только что установлен:

PROMPT_COMMAND='[ -e /var/tmp/proxy-settings ] &&. /var/tmp/proxy-settings.sh'

Но это работает, а это главное, верно?

Или вы могли бы выработать привычку не забывать вручную создавать файл, подобный /var/tmp/proxy-settings.sh, в каждой оболочке, которая в нем нуждается, когда это необходимо.

Вероятно, вы можете сделать то же самое, используя переменную $PS1в других оболочках (, таких как ash, dash, zsh, kshи т. д. ). Но эта версия с использованием КОМАНДЫ PROMPT _достаточно безобразна и хакерская. Делать это с помощью PS1было бы еще хуже.

0
28.07.2021, 11:33

Теги

Похожие вопросы