2013-05-02 4 views
1

Я хочу запустить серию команд bash, сгенерированных скриптом Python. Команды имеют вид export foo="bar" и alias foo=bar. Они должны изменить среду текущего процесса.Выполнение сгенерированных команд в bash

Это прекрасно работает:

$(./generate_commands.py) 

пока команда экспорта не содержит пробел, например, export x="a b". Это порождает ошибку, и экспортируется только "a (включая кавычки).

В настоящее время я работаю над этим, выводя generate_commands во временный файл и источники, но есть ли более элегантное решение?

+2

Можете ли вы показать, что вы делаете в точности? – MMM

+0

Надеюсь, я поставил вопрос немного яснее. –

+1

«Они должны изменить среду текущего процесса». Это не сработает. Если вы в настоящее время работаете в 'python', то, независимо от точного синтаксиса или метода этого, запуск' bash' для оценки генерируемых вами команд запустит отдельный процесс, который по определению не может влиять на переменные среды его родительского процесса. – twalberg

ответ

4
./generate_commands | bash 

Это будет конвейер вывод сценария в качестве входных данных для bash

Edit:

Чтобы обеспечить переменные, чтобы быть видимыми в текущей оболочке, вы нужно источник вывода:

source <(./generate_commands) 

или

. <(./generate_commands) 
+0

Извинения за неясность в первый раз: команды в основном имеют форму 'export x = y' и должны изменять среду текущего процесса. –

+0

@MichaelPlatings, то поиск источников - это ваш единственный путь, все остальное будет только изменять среду подсетей, ответить отредактировал – Alex

+0

Я думаю, это ответ, спасибо. Следующая проблема: 'print 'export' + key + '="' + value + '"' IOError: [Errno 32] Broken pipe' –

0

Я думаю, что проблема в OP является

cmd="export x=\"a b\"" 
${cmd} 

не работает, но

export x="a b" 

работы. Мой путь вокруг этого

export x="a" 
echo $x 
x+=" b" 
echo $x 
+0

Интересная идея, но 'cmd2 =" x + = \ "b \" "' '$ {cmd2}' генерирует ошибку 'bash: x + =": command not found' –

+0

@MichaelPlatings Вы поместили их в скрипт? работал на моей машине, хотя :) – gongzhitaao

+0

Да. Он работает при наборе команд напрямую, но возникает ошибка при запуске команд из сценария. –

Смежные вопросы