Передать скрипт в фоновый режим, используя сам скрипт

Используйте xargs Флаг замены строки

Вам необходимо использовать флаг строки замены для xargs. Например, предположим, что остальная часть вашего конвейера работает, как задумано:

sudo arp-scan --localnet | grep 10 | cut -c1-12 | xargs -I{} -n1 ssh -tt myuser@{}

Обратите внимание, что обе команды xargs и ssh нуждаются в некоторых дополнительных флагах для правильной работы. Особо следует отметить необходимость передачи флагов -tt в SSH для принудительного выделения PTY на удаленном хосте, когда клиент SSH получает стандартный ввод из канала.

Используйте подстановку команд и переменные оболочки

В качестве альтернативы, если вы точно захватываете один IP-адрес, вы можете просто зафиксировать результат в переменной оболочки и вызвать SSH на правильном хосте. Например, использование оболочки Bash:

host_ip=$(sudo arp-scan --localnet | grep 10 | cut -c1-12)
ssh "myuser@${host_ip}"

Основное преимущество этого подхода в том, что его легче отлаживать. Однако ваш пробег может отличаться.

2
10.05.2019, 11:20
1 ответ

Вы можете реализовать это, если у вас есть что-то, чтобы решить, должен ли сценарий выполняться в фоновом режиме или он уже является одним в фоновом режиме, например. аргумент командной строки.

Предполагая, что вы обычно вызываете свой скрипт

./run.sh

вы можете добавить аргумент командной строки, например. bg, чтобы сообщить сценарию, что он уже находится во втором выполнении, чтобы он не вызывал себя рекурсивно бесконечное количество раз (или до тех пор, пока системные ресурсы не будут израсходованы ).

./run.sh bg

Вы можете реализовать это следующим образом

#! /bin/sh

if [ "$1" = "bg" ]
then

    # do the normal work

else

    nohup "$0" bg > /dev/null 2>&1 &

fi
2
27.01.2020, 22:17

Теги

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