использование ткани для изменения LD_LIBRARY_PATH

когда я захожу на удаленный сервер через ssh, я вижу, что LD_LIBRARY_PATH был:

echo $LD_LIBRARY_PATH
:/usr/local/lib

И когда я использую ткань в питоне, чтобы запустить тот же код в ткани, запустите API, результат будет пустым.

from fabric.api import *
def test():
    run("echo $LD_LIBRARY_PATH")

и даже когда я пытаюсь изменить LD_LIBRARY_PATH с помощью ткани, это вообще не работает.

from fabric.api import *
def test():
    run("echo $LD_LIBRARY_PATH")
    run("export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH")

Кто-нибудь знает, почему?


person holsety    schedule 21.02.2013    source источник
comment
Ответ здесь, вероятно, объясняет, почему: man" title="почему удаленная команда ssh получает меньше переменных среды, чем при запуске man"> stackoverflow.com/questions/216202/   -  person Josh Smeaton    schedule 21.02.2013
comment
Вы получаете гораздо меньше переменных среды, когда ткань sshs. После экспорта LD_LIBRARY_PATH из ткани возвращает ли эхо новый путь, который вы установили?   -  person Josh Smeaton    schedule 21.02.2013
comment
Я думаю, что каждая функция run использует отдельную ссылку на удаленный сервер, поэтому LD_LIBRARY_PATH при следующем запуске будет пустым.   -  person holsety    schedule 21.02.2013
comment
Я так не думаю, на днях я читал документы Fabric, и он кэширует соединения, информацию для входа и т. Д.   -  person Josh Smeaton    schedule 21.02.2013
comment
Голосование закрыто, поскольку ответ на ваш вопрос содержится в связанном вопросе.   -  person Josh Smeaton    schedule 21.02.2013


Ответы (1)


У меня была такая же проблема, и вот способ ее исправить. Вам нужна как минимум ткань 1.5.4, я думаю, чтобы использовать shell_env.

with shell_env(LD_LIBRARY_PATH ="/usr/local/lib"):
    run('something')
person Romanzo Criminale    schedule 26.06.2013