bash -cを使用して文字列コマンドを実行するときにパスを制御する方法は何ですか?

bash -cを使用して文字列コマンドを実行するときにパスを制御する方法は何ですか?

背景、引数を使用して子プロセスを生成する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 '....'非対話型(および非ログイン)セッションを作成することです。bashsource~/.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)。 )。

関連情報