Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: видимость переменных (bash или sh)  (Прочитано 2870 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн jedai108

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
видимость переменных (bash или sh)
« : 10 Декабря 2009, 20:25:52 »
sh(bash) - область видиости переменной

1.есть скрипты: script1.sh, script2.sh,..... ( в них задаются переменные )
HostDir="/qweqw/qwqw/wwwe/......"; Var2="....."; Var3="......"
sh run.sh
2.есть рабочий скрипт: run.sh (работает на основе переменных вызвашвего его одного из скриптов script1,2......(пункт1)
scp $HostDir ......
........

Вопрос:как заставить run.sh пользоваться значениями установленными переменными из script1.sh, script2.sh,.....
мой маленький UNIX  для мам 
Nokia N810(Ubuntu 9.04, Maemo5.2008.43-7)+8gb

Оффлайн vasilisc

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2563
  • г.Северодвинск - строим АПЛ
    • Просмотр профиля
    • Авторские статьи об OpenSource
Re: видимость переменных (bash или sh)
« Ответ #1 : 10 Декабря 2009, 21:23:15 »
1.sh
#!/bin/sh

clear
export HomeDir="/home/vasilisc"
echo $HomeDir
./2.sh
exit 0

2.sh
#!/bin/sh

echo $HomeDir
результат ./1.sh
/home/vasilisc
/home/vasilisc
Ускорение http://vasilisc.com/speedup_ubuntu
Железо http://vasilisc.com/hcl/detect.php
Призёр http://vasilisc.com/ubuntu_woman Если помог, то поддержите WM R259039388254

Axa-Ru

  • Гость
Re: видимость переменных (bash или sh)
« Ответ #2 : 10 Декабря 2009, 21:32:19 »
Автор хочет из 2.sh в 1.sh передать значения переменных.

Оффлайн jedai108

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Re: видимость переменных (bash или sh)
« Ответ #3 : 10 Декабря 2009, 21:39:59 »
Алексеенко Василий
спасибо  :D
мой маленький UNIX  для мам 
Nokia N810(Ubuntu 9.04, Maemo5.2008.43-7)+8gb

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: видимость переменных (bash или sh)
« Ответ #4 : 11 Декабря 2009, 11:07:02 »
На каждый скрипт bash обычно запускает новый процесс, в котором эти переменные и задаются, а потом исчезают, когда процесс завершается.
Если они заданы с export, то будут видны и в родительском процессе - это, ИМХО, моветон, да и происходит это не всегда, у меня как-то, было дело, не получалось задать переменные среды.

В рабочий скрипт в начале надо поставить вызов скриптов с заданием переменных на выполнение в текущем процессе.
Делается это так: точка (.), пробел, потом имя скрипта, возможно, с путем:

кусок run.sh:
. ./script1.sh
. ./script2.sh
и т.п.

Да! Из инициализирующих скриптов (script1.sh и прочие) вызов run.sh убрать и запускать сразу его.
« Последнее редактирование: 11 Декабря 2009, 11:25:18 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: видимость переменных (bash или sh)
« Ответ #5 : 11 Декабря 2009, 11:22:21 »
Как вариант.
Можно в скрипт передавать параметры, если не хочется делать экспорт. Но это не универсально.

Оффлайн jedai108

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Re: видимость переменных (bash или sh)
« Ответ #6 : 11 Декабря 2009, 14:22:05 »
Цитировать
Да! Из инициализирующих скриптов (script1.sh и прочие) вызов run.sh убрать и запускать сразу его.

у меня в script1 - назначаются переменные для одного хоста
run.sh - архиварует папки и файлы и скачивает на лок хост

script2 - назаначаются переменные другово хоста, затем запускается run.sh - делая операции архивирования и копирования уже на другом хосте

script3 - другие хосты.
мой маленький UNIX  для мам 
Nokia N810(Ubuntu 9.04, Maemo5.2008.43-7)+8gb

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: видимость переменных (bash или sh)
« Ответ #7 : 11 Декабря 2009, 14:42:26 »
Указание скрипта через точку (т.е. . ./script.sh) это сродни include. Т.е. как-бы содержимое файла ./script.sh вливается в место вызова. Для вызываемого файла даже шабанг(#!/bin/bash) не нужен, а уж export то и подавно.

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Re: видимость переменных (bash или sh)
« Ответ #8 : 11 Декабря 2009, 15:30:07 »
можно же передавать значения в командной строке вызова и парсить их в принимающей

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: видимость переменных (bash или sh)
« Ответ #9 : 11 Декабря 2009, 16:51:05 »
Цитировать
Да! Из инициализирующих скриптов (script1.sh и прочие) вызов run.sh убрать и запускать сразу его.

у меня в script1 - назначаются переменные для одного хоста
run.sh - архиварует папки и файлы и скачивает на лок хост

script2 - назаначаются переменные другово хоста, затем запускается run.sh - делая операции архивирования и копирования уже на другом хосте

script3 - другие хосты.
Нет проблем, ставим наоборот, в script?.sh вызов run.sh, точно так же, с точкой и пробелом.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.05 секунд. Запросов: 25.