Как выполнять сценарии в поведении родитель-потомок в bash?

Ваша оболочка делает это, чтобы помочь вам редактировать командные строки.

Библиотека readline bash сохраняет / восстанавливает режимы терминала. Вы можете увидеть это в функциях rl_prep_terminal и rl_deprep_terminal , вызываемых косвенно из edit_and_execute_command .

1
28.05.2016, 03:47
1 ответ

Вот один из способов добиться этого:

$ cat parent.sh
#!/bin/sh

echo parent.sh running

./child.sh

$ cat other.sh
#!/bin/sh

echo other.sh running

./child.sh

$ cat child.sh
#!/bin/sh

parent="$(ps -o comm= -p $PPID)"

if [ "$parent" != parent.sh ]; then
    echo this script should be directly executed by parent.sh, not by $parent
    exit 1
fi

echo "child.sh proceeding"

$ ./parent.sh
parent.sh running
child.sh proceeding

$ ./other.sh
other.sh running
this script should be directly executed by parent.sh, not by other.sh

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

Альтернативным способом может быть экспорт пользовательской переменной и проверка, установлена ​​ли она в дочерних процессах.

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

2
27.01.2020, 23:35

Теги

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