你想做的事情是不可能的。或更好:您尝试如何做到这一点是不可能的。
你的 bash 命令是错误的。bash -s command
不执行command
。它只是将字符串“command”存储在变量中$1
,然后将您带到提示符处。这就是python脚本似乎冻结的原因。你的意思是bash -c command
。
你为什么要采购.bashrc
?仅仅来源还不够.bash_aliases
吗?
即使您的 bash 命令正确,更改也只会在从 python 启动的 bash 会话中生效。一旦该 bash 会话关闭,并且您的 python 脚本完成,您将回到原来的 bash 会话。从 python 开始的 bash 会话中的所有更改都将丢失。
每次您想在当前 bash 会话中更改某些内容时,都必须在当前 bash 会话中进行。您从 bash 运行的大多数命令(系统命令、python 脚本,甚至 bash 脚本)都会产生另一个进程,并且您在该其他进程中所做的一切都不会影响您的第一个 bash 会话。
source
是一个内置的 bash,它允许您在当前运行的 bash 会话中执行命令,而不是生成另一个进程并在那里运行命令。定义 bash 函数是在当前运行的 bash 会话中执行命令的另一种方法。
有关采购和执行的更多信息,请参阅此答案。
你可以做些什么来实现你想要的
修改您的 python 脚本以仅对.bash_aliases
.
准备一个 bash 脚本来运行你的 python 脚本,然后 source .bash_aliases
.
#i am a bash script, but you have to source me, do not execute me.
modify_bash_aliases.py "$@"
source ~/.bash_aliases
为您添加一个别名以.bashrc
获取该脚本
alias add_alias='source modify_bash_aliases.sh'
现在,当您输入add_alias some_alias
bash 提示符时,它将被替换为source modify_bash_aliases.sh
然后执行。由于source
是内置 bash,脚本中的命令将在当前运行的 bash 会话中执行。python 脚本仍将在另一个进程中运行,但后续source
命令将在您当前正在运行的 bash 会话中运行。
其他方式
修改您的 python 脚本以仅对.bash_aliases
.
准备一个 bash 函数来运行你的 python 脚本,然后 source .bash_aliases
.
add_alias() {
modify_bash_aliases.py "$@"
source ~/.bash_aliases
}
现在您可以像这样调用该函数:add_alias some_alias