Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: задать переменную *nix
Форумы портала PHP.SU » Серверное администрирование » Администрирование *nix » задать переменную *nix

Страниц (2): [1] 2 »
 

1. DlTA - 12 Июля, 2013 - 10:00:40 - перейти к сообщению
как задать переменную в *nix из скрипта?
тоесть если сделать в консоли
$ TS='123'
да переменная установилась
а если написать sh скриптик

то ничего не происходит, переменная из глобальной области не меняет значение
2. LIME - 12 Июля, 2013 - 10:15:12 - перейти к сообщению
Цитата:
TS='321'
echo $TS

работает
(Добавление)
или я не так понял?
в любом случае каждый запущенный bash это отдельный процесс
3. DlTA - 12 Июля, 2013 - 10:25:07 - перейти к сообщению
не так понял


есть глобальная $PS1='123'
я хочу чтобы после запуска моего *.sh скрипта
$PS1='321'

тоесть если я указываю в скрипте PS1='321' то она, насколько я понял локальна, а нужно чтоб изменилось в глобальной области видимости
4. LIME - 12 Июля, 2013 - 10:28:12 - перейти к сообщению
5. DlTA - 12 Июля, 2013 - 10:53:29 - перейти к сообщению
где там ответ не нашел

тут http://hashcode[dot]ru/questions/228[dot][dot][dot]D0%B2-linux-unix

тоже нет
(Добавление)
блин везде описано почему не работает, но не вижу как это обойти кроме как прописать это дело в конфиге баша
6. Ch_chov - 12 Июля, 2013 - 11:29:16 - перейти к сообщению
В дочерний скрипт можно передать переменную с помощью export.
7. DlTA - 12 Июля, 2013 - 11:32:47 - перейти к сообщению
Ch_chov пишет:
В дочерний скрипт можно передать переменную с помощью export.

во во , а нужно в обратном направлении
(Добавление)
вот думаю, может это у меня виндовая привычка что я всегда и везде могу изменить)

решение таки через ( | )
прописал алиас в конфиге баша, и теперь вызвав его получаю нужное значение переменной
8. Мелкий - 12 Июля, 2013 - 11:51:19 - перейти к сообщению
CODE (bash):
скопировать код в буфер обмена
  1. user@brtech-ws-03:~$ cat shell
  2. #!/bin/bash
  3. TS='123'
  4. user@brtech-ws-03:~$ TS='321'
  5. user@brtech-ws-03:~$ . ./shell
  6. user@brtech-ws-03:~$ echo $TS
  7. 123
  8. user@brtech-ws-03:~$

?
9. DlTA - 12 Июля, 2013 - 12:07:34 - перейти к сообщению
по пунктам:
создал запускаемый файл,
в нем задал значение,
запустил,

блин но я вроде тоже делал, но у меня не получалось.
10. Мелкий - 12 Июля, 2013 - 12:15:16 - перейти к сообщению
Обратите внимание на точку перед ./shell
В ней вся суть и различие областей видимости.
11. DlTA - 12 Июля, 2013 - 12:32:55 - перейти к сообщению
воооооооооо +

что она означает?
(Добавление)
и не понятно почему нет того же результата
а точнее даже ошибка при
12. Мелкий - 12 Июля, 2013 - 12:47:33 - перейти к сообщению
Не знаю Меланхолия
13. EuGen - 12 Июля, 2013 - 12:55:06 - перейти к сообщению
Мелкий
"." перед командой - это не область видимости. Точнее, это можно сравнить с областью видимости только если исполнение идёт из самой командной строки.
DlTA
"." - это подключение кода. Работает так:
* Если выполняется непосредственно из командной строки, то исполняет скрипт
* Внутри другого скрипта, загружает сам скрипт (тот, что после точки).
Эффект - такой же, как у директивы #include для программ C.

Поэтому ". bash" - не имеет смысла, ведь "bash" не является верным путём к исходному коду (а если бы и являлся, то это - бинарный файл, который не имеет ничего общего с shell-скриптом).
14. DlTA - 12 Июля, 2013 - 13:08:00 - перейти к сообщению
EuGen а можно более простым языком, не доходит

почему нельpя например
15. EuGen - 12 Июля, 2013 - 13:58:32 - перейти к сообщению
DlTA
Так как речь идёт о запуске через командную строку, то "." попытается исполнить скрипт "cat". В зависимости от системы, ошибка может быть - либо не найден файл, либо, что скорее всего - то, что файл является бинарным (так как альяс "cat" всё же распознается системой).
На практическом примере:
CODE (bash):
скопировать код в буфер обмена
  1. user@host:~$ cat test.sh
  2. #!/bin/bash
  3. echo "Executed!"
  4. user@host:~$ ./test.sh
  5. Executed!
  6. user@host:~$ . ./test.sh
  7. Executed!
  8. user@host:~$ . cat ./test.sh
  9. bash: .: /usr/bin/cat: cannot execute binary file

- в последнем случае система попыталась подключить файл "cat", обнаружила, что это альяс для /usr/bin/cat - попыталась подключить его (внимание - подключить как sh-скрипт) - и, разумеется, потерпела неудачу, ведь /usr/bin/cat - это бинарный файл, а не файл с текстом sh-скрипта.
Для ещё большей понятности:
CODE (bash):
скопировать код в буфер обмена
  1. user@host:~$ sudo vim /usr/bin/sometest
  2. user@host:~$ sudo chmod 755 /usr/bin/sometest
  3. user@host:~$ which sometest
  4. /usr/bin/sometest
  5. user@host:~$ sudo cat /usr/bin/sometest
  6. #!/bin/bash
  7. cat $1
  8. user@host:~$ . sometest ./test.sh
  9. #!/bin/bash
  10. echo "Executed!"

- я создал исполняемый файл /usr/bin/sometest, в который поместил текстовый sh-скрипт, который исполняет cat для первого аргумента командной строки. Такой скрипт, в отличие от cat, будет успешно подключён (так как является текстом) и исполнен (так как является правильным sh-скриптом)

 

Powered by ExBB FM 1.0 RC1