Bash

使用 bash -c 執行字元串命令時如何控制路徑?

  • November 8, 2015

背景,我正在嘗試使用一個 Python 庫,該庫使用 arguments 生成一個子程序["bash", "-c", "python someScript.py"]。發生的事情是執行 Python 2.6,但我想要 python2.7。Python 2.6 在/usr/bin/,Python 2.7 在/usr/local/bin

如果我說python -Vtype python我得到:

Python 2.7.10python 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.

正如您已定義aliasin ~/.bashrc,您可以使用該選項-ibash模擬互動式環境,從而模擬文件: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

引用自:https://unix.stackexchange.com/questions/241560