Как создать сценарий оболочки и использовать переменную оболочки, определенную в сгенерированном сценарии оболочки? - PullRequest
1 голос
/ 16 апреля 2020

У меня есть сценарий оболочки, который генерирует и запускает сценарий оболочки. Мне нужно завладеть переменной, которая устанавливается после запуска сгенерированного скрипта. Скрипт testVar:

#!/bin/bash

echo "#!/bin/bash" > testGen
echo "somePid='12345' # this is actually set by a program" >> testGen
echo "echo \"somePid set to: \${somePid}\"" >> testGen

/bin/bash ./testGen  # execute the generated script

echo "somePid after exec: ${somePid}" # how to get the ${somePid}?

Как я могу получить $ {somePid}? Ожидаемый результат:

$ ./testVar
somePid set to: 12345
somePid after exec: 12345

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020
  1. Прежде всего, вы можете сохранить идентификатор процесса в файле, в Linux очень популярна идея сохранения pid в PIDFILE (file.pid). Многие процессы linux делают это, сохраняя свои pid-файлы в / var / run или в / tmp. Затем вы можете прочитать pid из файла, используя команду cat

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

0 голосов
/ 16 апреля 2020

Вы можете сохранить PID в файле, например

# This is in your testVar
echo 'echo $somePid >somePid' >> testGen

После запуска вашей программы вы можете получить его оттуда:

./testVar
echo "somePid after exec: $(<somePid)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...