我正在编写一个python脚本(Linux),它正在添加一些shell aliases(将它们写到HOME/.bash_aliases
)。
为了使别名在编写后立即可用,我应该发布以下bash内置:
source HOME/.bashrc
source
是bash内置的,因此我不能仅:
os.system(source HOME/.bashrc)
如果我试着这样做:
os.system('/bin/bash -c source HOME/.bashrc')
…会冻结脚本(就像在等待什么一样)。
有什么建议吗?
Tags:
你想做的是不可能的。或者更好:你怎么做是不可能的。
你的bash命令是错误的。
bash -s command
不执行command
。它只是将字符串“command”存储在变量$1
中,然后将您拖到提示符处。这就是python脚本似乎冻结的原因。你的意思是bash -c command
。为什么要寻找
.bashrc
?光是源代码是不够的吗?即使bash命令正确,这些更改也只会在从python启动的bash会话中生效。一旦bash会话关闭,python脚本完成,您就回到原来的bash会话。从python启动的bash会话中的所有更改都将丢失。
每次您想在当前bash会话中更改某些内容时,都必须在当前bash会话中进行更改。从bash运行的大多数命令(系统命令、python脚本,甚至bash脚本)将生成另一个进程,而在该另一个进程中执行的所有操作都不会影响第一个bash会话。
source
是bash内置的,它允许您在当前运行的bash会话中执行命令,而不是在其中生成另一个进程并运行命令。定义bash函数是在当前运行的bash会话中执行命令的另一种方法。请参阅this answer了解有关源代码和执行的更多信息。
你能做什么来实现你想要的
修改python脚本,只需对
.bash_aliases
进行必要的更改。准备bash脚本以运行python脚本,然后运行源代码
.bash_aliases
。将别名添加到您的
.bashrc
以获取该脚本现在,当您在bash提示符中键入
add_alias some_alias
时,它将被替换为source modify_bash_aliases.sh
,然后执行。由于source
是bash内置的,脚本中的命令将在当前运行的bash会话中执行。python脚本仍将在另一个进程中运行,但随后的source
命令将在当前运行的bash会话中运行。另一种方式
修改python脚本,只需对
.bash_aliases
进行必要的更改。准备一个bash函数来运行python脚本,然后运行源代码
.bash_aliases
。现在可以这样调用函数:
add_alias some_alias
你想要什么是不可能的。程序(脚本)无法修改调用者(运行它的shell)的环境。
另一种允许您做一些接近的事情的方法是用bash函数编写它,bash函数在同一个进程中运行,可以修改调用者。请注意,根据用户在bashrc中的内容,在运行时进行寻源可能会产生负面影响。
[[工作解决方案]]
http://stackoverflow.com/questions/6856119/can-i-use-an-alias-to-execute-a-program-from-a-python-script
相关问题 更多 >
编程相关推荐