Como controlar o caminho ao executar um comando string usando bash -c?

2

Em segundo plano, estou tentando usar uma biblioteca Python que gera um sub-processo usando os argumentos ["bash", "-c", "python someScript.py"] . O que está acontecendo é que o Python 2.6 é executado, mas eu quero o python2.7. O Python 2.6 está em /usr/bin/ e o Python 2.7 está em /usr/local/bin

Se eu disser python -V e type python , obtenho:

Python 2.7.10 e python is aliased to /usr/local/bin/python2.7

(Nota, eu configurei este alias no meu arquivo .bashrc : alias python=/usr/local/bin/python2.7 )

No entanto, se eu invoco bash -c "type python" , obtenho:

python is /usr/bin/python

Tanto echo $PATH quanto bash -c "echo $PATH" geram o mesmo caminho:

/usr/local/bin:/usr/local/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/lib:/usr/local/lib

Note que tentei colocar /usr/local/bin primeiro quando exporto o PATH no meu .bashrc.

Então, minha pergunta é: o que está controlando o pathing (neste caso, para o Python) quando executo um comando de string usando bash -c ? Especificamente, como obtenho o bash -c "python" para usar o Python 2.7? Edit: Os argumentos ["bash", "-c", "python someScript.py"] são codificados na biblioteca, e eu prefiro não ter que modificar a fonte da biblioteca.

    
por Ryan J McCall 08.11.2015 / 01:29

3 respostas

1

O problema é que, ao fazer bash -c '....' , você está gerando uma sessão não interativa (e sem login) de bash , que não irá source de qualquer arquivo de configuração de tempo de execução, por exemplo. ~/.bashrc .

Como você definiu o alias em ~/.bashrc , é possível usar a opção -i para que bash possa simular o ambiente interativo e, portanto, source o arquivo ~/.bashrc :

bash -ic '....'

Agora, o alias deve estar disponível.

Exemplo:

$ alias l
alias l='ls'

$ bash -c 'l'
bash: l: command not found

$ bash -ic 'l'
bar  foo
    
por 08.11.2015 / 03:51
0

Use o caminho completo para o comando. bash -c /usr/local/bin/python

    
por 08.11.2015 / 02:44
0

Eu acho que o seu .bashrc não é originado em um shell não interativo como este - tente colocar a configuração PATH em seu arquivo .profile, que também funcionará para alguns outros shells (ou .bash_profile se você deseja definir apenas para bash).

    
por 08.11.2015 / 02:50