使用 bash -c 執行字元串命令時如何控制路徑?
背景,我正在嘗試使用一個 Python 庫,該庫使用 arguments 生成一個子程序
["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 時,我嘗試將其放在首位。所以我的問題是,當我使用 執行字元串命令時,是什麼控制了路徑(在本例中為 Python)
bash -c
?具體來說,如何bash -c "python"
使用 Python 2.7?編輯:參數["bash", "-c", "python someScript.py"]
在庫中是硬編碼的,我寧願不必修改庫源。
問題是,在執行 時
bash -c '....'
,您正在生成 的非互動式(和非登錄)會話bash
,它不會source
有任何執行時配置文件,例如~/.bashrc
.正如您已定義
alias
in~/.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
使用命令的完整路徑。
bash -c /usr/local/bin/python