背景、引数を使用して子プロセスを生成するPythonライブラリを使用しようとしています["bash", "-c", "python someScript.py"]
。 Python 2.6が実行されますが、Python2.7が必要です。 Python 2.6は現在オンラインです/usr/bin/
。 Python 2.7は現在オンラインです。/usr/local/bin
私が言うと、次python -V
のようなtype python
結果が得られます。
Python 2.7.10
そしてpython is aliased to /usr/local/bin/python2.7
.bashrc
(注:私はすでにファイルにこのエイリアスを設定していますalias python=/usr/local/bin/python2.7
。)
ただし、電話すると次のようなbash -c "type python"
結果が得られます。
python is /usr/bin/python
echo $PATH
どちらもbash -c "echo $PATH"
同じパスを出力します。
/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
/usr/local/bin
.bashrcからPATHをエクスポートするときは、まずPATHを入れようとします。
だから私の質問は、文字列実行コマンドを使用するときの制御パス(この場合はPython)は何ですかbash -c
?具体的には、bash -c "python"
Python 2.7を使用する方法は?編集:パラメータは["bash", "-c", "python someScript.py"]
ライブラリにハードコードされており、ライブラリソースを変更したくありません。
答え1
問題は、実行時にランタイム設定ファイルがないbash -c '....'
非対話型(および非ログイン)セッションを作成することです。bash
source
~/.bashrc
alias
で定義するときは、~/.bashrc
この-i
オプションを使用してbash
対話型環境とsource
ファイルをシミュレートできます~/.bashrc
。
bash -ic '....'
それは今alias
利用可能でなければなりません。
例:
$ alias l
alias l='ls'
$ bash -c 'l'
bash: l: command not found
$ bash -ic 'l'
bar foo
答え2
コマンドのフルパスを使用します。bash -c /usr/local/bin/python
答え3
私はあなたの.bashrcがこのように非対話型シェルに由来するとは思いません。 PATH設定を.profileファイルに入れてみてください。これは他のシェルでも機能します(またはbashに設定したい場合は.bash_profile)。 )。