powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash выполнить строку как команду (с пробелами и новыми линиями)
8 сообщений из 8, страница 1 из 1
bash выполнить строку как команду (с пробелами и новыми линиями)
    #37384442
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, не могу выполнить строчку как команду - bash не понимает пробелов и новых линий.

Нужно вот для чего - есть внешний скрипт, который не может никак менять переменные среды6 поэтому я сделал для него обертку на bash она запускает скрипт,получает текст который нужно выполнить и выполняет его, вот с этим проблема - текс не выполняется

Вот что возвращает скрипт:

Код: plaintext
1.
2.
export RUBYOPT="-rrubygems -r/Users/alex/projects/fake_gem/lib/fake_gem.rb"
export FAKE_GEM_PATHS="/Users/alex/projects"

Итак, я его в bash выполяю и сохраняю эту строчку в переменной OUT, но как ее выполнить?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#!/bin/bash

DIR="$( cd "$( dirname "$0" )" && pwd )"
OUT=$($DIR/fake_gem.rb $*)
# все, скрипт выполнили и сохранили его вывод в $OUT

eval $OUT
# евал работает, но не меняет переменные текущей сессии, по видимому он в отделном процессе что-ли его выполняет

$OUT
# напрямую команда тоже не выполняется - какая-то ошибка с пробелами, новыми строчками или еще чем-то, вот что он пишет
# line  5 : export: `-r/Users/alex/projects/fake_gem/lib/fake_gem.rb"': not a valid identifier

source $OUT
# тоже не работает, source по виимому принимает только названия файлов

Как это можно сделать?
...
Рейтинг: 0 / 0
bash выполнить строку как команду (с пробелами и новыми линиями)
    #37384527
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему бы не спихнуть эту строчку в файл и не выполнить его?
...
Рейтинг: 0 / 0
bash выполнить строку как команду (с пробелами и новыми линиями)
    #37384615
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это часть распространяемой библиотеки, он может быть на любом компютере, и обычно на нее есть доступ только у рута, можно в tmp создать, но я подумал может есть способ сделать это без создания файла.
...
Рейтинг: 0 / 0
bash выполнить строку как команду (с пробелами и новыми линиями)
    #37384661
Meph1st0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$ cat /tmp/ 1 
A= 1 
B= 2 
$ . /tmp/ 1 
$ echo $A
 1 
$ eval "A=2"
$ echo $A
 2 
$ C="$(cat /tmp/1)"
$ eval "$C"
$ echo $A
 1 
Файл "cat /tmp/1" - аналог вывода "$DIR/fake_gem.rb". Как видно из примера, eval отрабатывает и переменные в среде устанавливаются.

Пример содержимого переменной $OUT можете привести?
...
Рейтинг: 0 / 0
bash выполнить строку как команду (с пробелами и новыми линиями)
    #37385923
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вы правы, я наверно не точно описал что нужно.

Переменные меняются внутри скрипта, но мне нужно чтобы они также изменились и в баш-консоли в которой вызван этот скрипт. Ддаже не подумал проверить их внитури самого скрипта, сейчас проверил - да, как вы и написали - после 'eval' внутри скрипта переменные меняются, но в самой консоли по прежнему отсутствуют.

Их можно как-то установить и в самой консоли? Попробовал вот так, но не получается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#!/bin/bash

DIR="$( cd "$( dirname "$0" )" && pwd )"
OUT=$($DIR/fake_gem.rb $*)

eval $OUT

export RUBYOPT=$RUBYOPT
export FAKE_GEM_PATHS=$FAKE_GEM_PATHS

сам скрипт вызываю таким образом
Код: plaintext
1.
2.
3.
env | grep FAKE_GEM_PATHS # пусто
fake_gem ~/projects
env | grep FAKE_GEM_PATHS # пусто, а нужно чтобы FAKE_GEM_PATHS установилась
...
Рейтинг: 0 / 0
bash выполнить строку как команду (с пробелами и новыми линиями)
    #37385924
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В переменной $OUT вот что содержится

Код: plaintext
1.
2.
export RUBYOPT="-rrubygems -r/Users/alex/projects/fake_gem/lib/fake_gem.rb"
export FAKE_GEM_PATHS="/Users/alex/projects"
...
Рейтинг: 0 / 0
bash выполнить строку как команду (с пробелами и новыми линиями)
    #37386245
ite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ite
Гость
Нет, так как вы хотите сделать - не получится, переменную родительского процесса нельзя установить\изменить из дочернего(коим является ваш скрипт)
...
Рейтинг: 0 / 0
bash выполнить строку как команду (с пробелами и новыми линиями)
    #37386302
Meph1st0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно использовать конструкцию вида
Код: plaintext
1.
. имя_скрипта

Скрипт будет исполняться в контексте текущего окружения.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash выполнить строку как команду (с пробелами и новыми линиями)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]