Проверить, вызывает ли скрипт сам себя

Запретить доступ по SSH изwlan1:

iptables -A INPUT -i wlan1 -p tcp --dport 22 -j REJECT --reject-with icmp-port-unreachable

Общее замечание :Не вижу смысла использовать

-s 192.168.4.0/24 -i wlan1 -o eth1

вместо

-i wlan1 -o eth1

поскольку вы хотите заблокировать все пакеты, а не только те, у которых правильный исходный адрес, я думаю.

0
18.02.2020, 01:05
2 ответа

На этот вопрос SO есть принятый ответ, который показывает, как получить имя сценария вызывающего абонента в сценарии bash следующим образом:

PARENT_COMMAND=$(ps -o comm= $PPID)
0
28.04.2021, 23:23

Вероятно, самый простой и надежный способ — использовать переменную среды оболочки. Мы будем использовать $MY_COOL_SCRIPT_RECв качестве имени переменной, предназначенной для нашего скрипта.

#!/bin/bash

# test indrect command calling, can be removed afterwards
PARENT_COMMAND=$(ps -o comm= $PPID)
echo parent is $PARENT_COMMAND

# check recursion
if [ -z ${MY_COOL_SCRIPT_REC+x} ]; then
  echo no recursion
else
  echo in recursion, exiting...
  exit  # stop if in recursion
fi
# set an env variable local to this shell
export MY_COOL_SCRIPT_REC=1

# run again in another disowned shell
nohup./test.sh &

с выходом

$./test.sh
parent is bash
no recursion
$ nohup: appending output to 'nohup.out'

# content of 'nohup.out'
parent is systemd
in recursion, exiting...

В качестве бонуса его можно легко использовать для ограничения глубины рекурсии

#!/bin/bash

PARENT_COMMAND=$(ps -o comm= $PPID)
echo parent is $PARENT_COMMAND

# set env var if not exists
export MY_COOL_SCRIPT_REC="${MY_COOL_SCRIPT_REC:-0}"
# check recursion
if [ "${MY_COOL_SCRIPT_REC}" -le "3" ]; then
  echo recursion depth ${MY_COOL_SCRIPT_REC}
else
  echo exiting...
  exit  # stop
fi

# increment depth counter
export MY_COOL_SCRIPT_REC=$(($MY_COOL_SCRIPT_REC+1))

# run again in another shell
nohup./test.sh &

с выходом

$./test.sh
parent is bash
recursion depth 0
$ nohup: appending output to 'nohup.out'

# content of 'nohup.out' (the rest of outputs are all not displayed in same shell)
parent is systemd    
recursion depth 1    
parent is systemd    
recursion depth 2    
parent is systemd    
recursion depth 3    
parent is systemd    
exiting...  

Параметр nohupиспользуется для проверки работоспособности сценария, даже если он вызывается косвенно. Переменная $MY_COOL_SCRIPT_RECтакже является локальной для процессов, порожденных только сценарием ./test.sh.

0
28.04.2021, 23:23

Теги

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