Как запустить команду сценария внутри исполняемого процесса? [дубликат]

Я не привожу реальный пример, поскольку сообщение становится настолько длинным, что его никто не прочитает. Поэтому я приведу другие примеры У меня есть сценарий bash name.sh, и он запрограммирован следующим образом-

#!/bin/bash
echo "Please Enter your name"
read name
echo "Hello $name"
sudo bash age.sh

И еще один сценарий (скажем, age.sh), подобный этому-

#!/bin/bash
*echo "Hello $name"
echo "Please enter your age"
read age
echo "Thank you"

* Здесь во втором скрипт Я хочу, чтобы переменная $ name из первого скрипта использовалась с тем же значением во втором скрипте, чтобы пользователю не приходилось снова вводить свое имя Конечно, если я объявляю переменную, я может сделать это и в другом скрипте, но если пользователь объявляет это, я не могу предсказать, что пользователь ответит. Так как мне передать то же значение в другой сценарий?
У меня есть другая идея сделать это
Это выглядит примерно так-

#!/bin/bash
echo "Please Enter your name"
read name
echo "Hello $name"
sudo bash age.sh --variable_value

Каким-то образом я могу сделать 2-й сценарий использует значения, указанные после - и присваивает им те же переменные?

4
задан 18 May 2021 в 19:58

2 ответа

Есть по крайней мере два подхода, которые вы можете использовать:

  1. Передать переменную в качестве позиционного параметра сценарию:

    ./script.sh $VARIABLE
    
  2. Экспортировать переменную, чтобы вложенные оболочки могли ее использовать:

    export VARIABLE
    ./script.sh
    

Допустим, в обычном случае, когда вы запускаете скрипт из другого скрипта или, возможно, более правильно из командной оболочки, субъект скрипта вызывает подпрограмму.

Вот пример с двумя скриптами под названиями master.sh и slave.sh:

$ cat master.sh
#!/bin/bash
echo "Please Enter your name"
read THE_NAME
./slave.sh "$THE_NAME"
$ cat slave.sh
#!/bin/bash

# Test whether the $NAME is provided in some way. If not ask the user for the value.
if [[ -z $THE_NAME || $THE_NAME = '' ]]; then THE_NAME="$1"; fi
if [[ -z $THE_NAME || $THE_NAME = '' ]]; then echo "Please provide your name"; read THE_NAME; fi

echo "Your name is: ${THE_NAME}"
$ ./slave.sh
Please provide your name
SPAS Z. SPASOV
Your name is: SPAS Z. SPASOV
$ THE_NAME=Spas
$ export THE_NAME
$ ./slave.sh
Your name is: Spas
$ ./master.sh
Please Enter your name
Spas Spasov
Your name is: Spas Spasov
3
ответ дан 28 July 2021 в 11:38

Экспортируйте переменную в вызывающем скрипте:

read name
export name="$name"

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

Для извлечения параметров командной строки в скрипте используйте переменные "$1", "$2", ... Они заполняются различными аргументами, переданными команде. "$0" получит имя самой команды, "$@" получит всю строку параметра сразу.

4
ответ дан 28 July 2021 в 11:38

Другие вопросы по тегам:

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