Как узнать инициатора скрипта в unix

Вы можете использовать ping (1)(использует ICMP ECHO REQUEST/REPLY ). Если вы подозреваете, что какой-то брандмауэр может мешать, traceroute (8 )покажет путь к месту назначения (tcptraceroute (8 )— удобная оболочка здесь ). Вы можете указать, какой протокол и порт использовать, а также множество экзотических опций.

1
02.05.2020, 00:27
2 ответа

Можно было бы с оболочкой bash. sourceможет предоставить аргумент файлу.

Это означает, что вы можете построить foo.sh как:

#!/bin/bash
echo "Hello from $1"

и bar.sh как

#!/bin/bash
source ~/Codes/tests/foo.sh '~/bar.sh'

в итоге baz.sh будет выглядеть вот так:

#!/bin/bash
source ~/Codes/tests/foo.sh '~/baz.sh'

Если вас волнует то, как был вызван скрипт, вы также можете написать foo.sh как

#!/bin/bash
echo "Hello from $0"

и bar.sh как

#!/bin/bash
source ~/Codes/tests/foo.sh

Это даст Hello from./bar.sh, если вы вызовете его из каталога скриптов. Если вы вызовете его из своего дома, вы получитеHello from ~/bar.sh

0
28.04.2021, 23:16

Это bashрешение (для скриптов с #!/bin/bashв качестве первой строки или запуска сbash script...).

Настройте пример (два сценария, a.shиb.sh):

cat >a.sh <<'x' && chmod a+x a.sh
#!/bin/bash
echo This is a.sh
source b.sh
echo End a.sh
x

cat >b.sh <<'x' && chmod a+x b.sh
#!/bin/bash
echo This is b.sh
echo "BASH_SOURCE=(${BASH_SOURCE[@]}) and we are '${BASH_SOURCE[0]}' called by '${BASH_SOURCE[1]}'"
echo End b.sh
x

Теперь запустите код и просмотрите вывод:

./a.sh
This is a.sh
This is b.sh
BASH_SOURCE=(b.sh./a.sh) and we are 'b.sh' called by './a.sh'
End b.sh
End a.sh

Как видите, в файле sourced вызывающий абонент может быть идентифицирован с помощью "${BASH_SOURCE[1]}".

1
28.04.2021, 23:16

Теги

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