Используйтеgetent
:
$ getent hosts unix.stackexchange.com
151.101.193.69 unix.stackexchange.com unix.stackexchange.com
Если я правильно понял ваш вопрос, ваше желаемое поведение состоит в том, чтобы прервать сон и вернуться в интерактивныйvim
-подобный режим с помощью :
.
Ответ заключается в том, как обрабатывается функция сна, поскольку sleep
сама по себе не является обычной командой оболочки, а довольно специальной командой, которая создает фиктивное задание, которое выполняется в течение определенного времени,и, соответственно, это необходимо учитывать при обработке прерываний. Однако вашего поведения можно легко добиться, изменив сценарий как таковой.
#!/bin/bash
trap 'kill $(jobs -p)' INT
for i in {1..90}
do
printf '%s\n' "$i"
done
sleep infinity &
wait
printf '91\n'
sleep 10 &
printf 'done\n'
Я немного модифицировал ваш исходный скрипт, чтобы он засыпал на бесконечность для тестирования.
Когда вы достигаете и затем пытаетесь пройти линию 90, sleep
включается и работает вечно. Чтобы выйти из него, просто нажмите CTRL+C , что благодаря ловушке сигнала не только прервет нашу sleep
работу, но и вернет вам желаемый :
и его функционал (, который вам может понадобиться нажать клавишу после выполнения CTRL+C). Кроме того, как только вы снова попытаетесь пройти дальше строки 90, сразу же будет напечатана строка 91, так как выполнение скрипта прошло мимо первого задания sleep
.