首页 > 解决方案 > 返回用于执行应用程序的别名

问题描述

有没有办法回显用于运行脚本的别名而不是实际的 .py 名称?

从重击

user$alias TESTA='/home/user/script.py'
user$TESTA arg1 arg2

sys.argv[0] 返回 /home/user/script.py 我正在寻找返回 TESTA 的东西?

标签: pythonbashunix

解决方案


你可能不走运:别名是短暂的,shell在调用进程之前替换它们。

事实上,在 Linux 上,甚至/proc/$$/cmdline不再包含别名。您可以通过将以下代码保存为来验证这一点proc.py

#!/usr/bin/env python3

import os

with open(f'/proc/{os.getpid()}/cmdline', 'r') as cmdline:
    print(cmdline.read().replace('\0', ' '))

然后按如下方式调用它:

chmod +x proc.py
alias foo=proc.py
foo

其输出将类似于以下内容

python3 ./x.py

......没有提到别名foo

如果您希望能够使用不同的名称调用您的代码,请改用符号链接。以下作品:

ln -s proc.py foobar
./foobar

现在您的“别名”(符号链接路径)将可以作为sys.argv[0].


推荐阅读