trap '' INT
предназначен для игнорирования SIGINT для оболочки и всех ее дочерних элементов.
Но, глядя на результаты strace
на scp
, похоже, что scp
устанавливает собственный обработчик SIGINT, который отменяет SIG_IGN, указанный выше.
Единственный способ предотвратить получение SIGINT - запустить его в другой группе процессов, например:
perl -MPOSIX -e 'setpgid 0,0; exec @ARGV' scp...
или
(set -m; scp ... & wait)
, или указать драйверу tty, чтобы он прекратил посылать SIGINT при нажатии Ctrl-C (как с stty -isig
или stty intr ''
только для ^ C
), хотя впоследствии вы захотите восстановить настройки:
saved=$(stty -g)
stty intr ''
scp ...
stty "$saved"
Команда ip route get ADDRESS
работает, даже если шлюз по умолчанию не настроен.Например, если на eth0 настроены следующие адреса: 10.0.7.139/24
, 169.254.1.2/16
, а маршрут по умолчанию удален, то
$ ip route get 10.0.7.222
10.0.7.222 dev eth0 src 10.0.7.139
cache
$ ip route get 169.254.55
169.254.55.0 dev eth0 src 169.254.1.2
cache
$ ip route get 1
RTNETLINK answers: Network is unreachable
Последний ответ правильно: невозможно добраться до хоста с любым из адресов 1.xxx, если к нему не существует маршрута. Это не команда ip route get
не работает, это неправильная конфигурация сети.
Обратите внимание, что «локальный канал» означает именно то, что адрес предназначен для использования только в канале Ethernet, к которому подключен eth0. Его не следует использовать на «исходящем» соединении.
Редактировать: поясняющий комментарий добавлен ниже.
Таблица маршрутизации, и только таблица маршрутизации, определяет, как пакет начинает свой путь к месту назначения. Маршрут всегда используется при отправке IP-пакета, даже если пункт назначения находится на локальном канале или даже на локальном хосте. Записи таблицы маршрутизации также содержат исходный адрес, и этот адрес соответствующего маршрута выбирается в качестве исходного IP-адреса передаваемого пакета.
Может быть несколько IP-адресов, назначенных одному и тому же интерфейсу, даже из одного и того же диапазона адресов, но только один из них (первичный адрес) указан в соответствующей записи таблицы маршрутизации.
Таким образом, ip route get
(или косвенно ip route
) дает окончательный ответ на ваш вопрос. Из справочной страницы ip-route
: «Эта команда получает единственный маршрут к месту назначения и печатает его содержимое точно так, как его видит ядро."