Если я не ошибаюсь, это звучит так, будто вы входите на сервер, а затем запускаете сеанс VPN с этого сервера в другое место. Я вижу, что у вас может возникнуть проблема (без дополнительных разъяснений) в том, что вы не виртуализируете VPN-соединение. Каждый раз, когда у вас есть машина, устанавливающая VPN-туннель, который не находится в виртуальной среде в NAT-соединении, VPN-туннель берет на себя соединение и полностью отделяется от любого другого трафика. Таким образом, вы по-прежнему будете видеть активность сетевого адаптера через туннель, но соединение не будет открыто для внешних эхо-запросов или другого трафика, который вы используете для проверки подключения.
Опять же, в этом я мог ошибаться. Я не эксперт по VPN.
Is $PROMPT_COMMAND a colon separated list?
Это достаточно легко проверить:
$ PROMPT_COMMAND='true:true' bash
bash: true:true: command not found
$ exit
Итак, ответ «нет».
Но вы можете воспринимать это как разделенную точкой с запятой последовательность команд, как и любую другую строку шелл-кода:
$ PROMPT_COMMAND='echo x;echo y' bash
x
y
$ exit
Это то, что задание в вашем вопросе имеет :несколько команд, разделенных точкой с запятой, с более ранним значением PROMPT_COMMAND
, добавленным в конец.
Конечно, другим способом запуска нескольких команд из PROMPT_COMMAND
было бы создание функции и вызов ее оттуда.
Тем не менее, последовательность printf
в вашем PROMPT_COMMAND
выглядит так, как будто ее лучше поместить в реальную подсказку по двум причинам. Во-первых, она не заканчивается новой строкой, так что она может исказить представление Bash о том, где находится курсор, точно так же, как и другие команды, выводящие неполные строки перед выходом. Во-вторых, если у вас есть оболочка -для печати подсказки, через вкладку -завершение, PS1
будет повторно отображаться, но PROMPT_COMMAND
не будет запускаться снова.