退出python脚本时在bash中创建别名

退出python脚本时在bash中创建别名,python,bash,alias,Python,Bash,Alias,我已经用python编写了一个shell(使用cmd模块),当使用这个shell时,关于运行ect命令的某些信息。输出到文本文件。我想编写一段代码,创建一个别名来查看bash shell中的文本文件(例如,我执行了以下命令): alias latest.trc='less 我目前最大的努力是: x="alias %s = 'less %s'" % (<alias name>, <path>) y=shlex.split(x) atexit.register(subproc

我已经用python编写了一个shell(使用cmd模块),当使用这个shell时,关于运行ect命令的某些信息。输出到文本文件。我想编写一段代码,创建一个别名来查看bash shell中的文本文件(例如,我执行了以下命令):
alias latest.trc='less
我目前最大的努力是:

x="alias %s = 'less %s'" % (<alias name>, <path>)
y=shlex.split(x)
atexit.register(subprocess.call, y)
我输入的路径当然是有效的,如果我直接从命令行运行x,它就会工作


非常感谢您对我的代码出现错误的原因或实现相同效果的更好方法的任何帮助。

您会遇到错误,因为
alias
bash
命令,而不是可执行文件。您必须在
shell中运行
子进程。调用

import subprocess                                                              
import atexit                                                                  
import shlex                                                                   

x="alias %s = 'less %s'" % ('a', 'whatever')                                   
y=shlex.split(x)                                                               
atexit.register(lambda args: subprocess.call(args, shell=True), y)             
但是,考虑到子流程生成新流程的事实,对其运行的环境所做的任何更改都会在退出时丢失

您最好创建一个文件,在其中放置所有这些别名,并在需要使用它们时手动获取它们的源代码

import subprocess                                                              
import atexit                                                                  
import shlex                                                                   

x="alias %s = 'less %s'" % ('a', 'whatever')                                   
y=shlex.split(x)                                                               
atexit.register(lambda args: subprocess.call(args, shell=True), y)