Практическое руководство включает вывод сценария в подсказку zsh

Необходимо указать, что правило должно войти nat таблица, дополнительно команды DNAT должны пойти цепочка PREROUTING, и необходимо быть осторожными, что Вы не генерируете цикл.

iptables -t nat -I PREROUTING -i br-lan -s ! 192.168.1.196  -p tcp --dport 80 -j DNAT --to-destination 192.168.1.196:3128

Таблица по умолчанию filter таблица.

Не забывайте, что Вам также нужен MASQUERADE/SNAT для перезаписи исходного адреса:

iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE

Это ПРАКТИЧЕСКОЕ РУКОВОДСТВО предоставляет больше возможностей и объяснений.

2
26.09.2014, 14:53
2 ответа

Есть два основных способа:

  1. Расширение параметра путем включения PROMPT_SUBST
  2. Массив psvar

1. Расширение параметров в подсказке

Если PROMPT_SUBST включен

setopt PROMPT_SUBST

, подсказка подвергается расширению параметров, подстановке команд и арифметическому расширению перед оценкой.

Таким образом, вывод сценария может быть включен с помощью подстановки команд. Например:

PROMPT='Look at this: $(python yourscript.py) >'

Если вывод содержит escape-последовательности (% ~ , % M , % F {red} и т. Д.), Они будут оценены перед напечатана подсказка.

2. Массив psvar

Одно из первых девяти значений массива psvar может быть установлено для вывода сценария. Затем его можно вызвать, используя % Xv ​​, где X - это число от 1 до 9 (по умолчанию 1, если X не указано).

psvar[5]=$(python yourscript.py)
PROMPT='Look at this: %5v >'

Чтобы обновлять значение каждый раз перед выводом подсказки, необходимо установить функцию ловушки precmd :

precmd() {
    psvar[5]=$(python yourscript.py)
}

Если уже существует функция precmd , или если нужно использовать более одной функции, рекомендуется использовать add-zsh-hook .

# load add-zsh-hook, need to be done only once
autoload -Uz add-zsh-hook

pyscript() {
    psvar[5]=$(python yourscript.py)
}

add-zsh-hook precmd pyscript

Это добавляет pycript в список функций, которые необходимо запустить перед печатью приглашения.

9
27.01.2020, 21:49

Вы можете сделать это, установив крючок precmd, который примет вывод команды и отформатирует его так, как вы хотите, а затем сделает его доступным для вашего PROMPT. Минимум, Вам нужно:

autoload -U add-zsh-hook
add-zsh-hook precmd my_precmd_hook_function

Определить my_precmd_hook_function, чтобы вызвать Ваш питоновый скрипт и захватить его вывод в переменную. Затем вы можете использовать эту переменную в вашем $PROMPT:

my_precmd_hook_function() {
  python_says=$(myPythonScript arg1 arg2)
}

PROMPT='$python_says'

Вы можете установить столько переменных, сколько вам нужно в вашем precmd крюке и использовать их для построения довольно сложного PROMPT. Просто имейте в виду, что чем больше Вы делаете в precmd крюке, тем дольше потребуется zsh, чтобы отрисовать подсказку и вернуть Вам управление. Если ваш питоновый скрипт более чем тривиально проста, вы, несомненно, заметите отставание.

Вы можете увидеть весь спектр возможностей в разделе SIMPLE PROMPT ESCAPES man page zshmisc.

3
27.01.2020, 21:49

Теги

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