需要在python脚本中扩展bash别名。尝试了许多方法来读取值,但无法获得它。1.检查命令是否是bash别名,返回扩展形式1.如果命令不是bash alias,则返回命令本身。Shell脚本可以通过以下方式实现:
alias testalias='aliascommand' cmd="testalias" shopt -s expand_aliases newcmd=${BASH_ALIASES[$cmd]} echo "$newcmd"
kqqjbcuj1#
在启动Python之前,你可以在shell**的帮助下做到这一点:
for alias_name in "${!BASH_ALIASES[@]}"; do printf -v "alias__${alias_name}" %s "${BASH_ALIASES[$alias_name]}" \ && export "alias__${alias_name}" done
...之后,os.environ.get(f'alias__{name}', None)将返回任何存在的别名,因此您可以将该文本添加到您打算运行的shell命令中,以获得别名本身具有的相同行为。但是,对于一般情况,应该使用导出函数而不是别名;使用subprocess.Popen('...script goes here...', shell=True, executable=shutil.which('bash'))将确保所讨论的脚本是用bash执行的,因此可以访问在父进程中运行的bash副本导出的任何函数。
os.environ.get(f'alias__{name}', None)
subprocess.Popen('...script goes here...', shell=True, executable=shutil.which('bash'))
1条答案
按热度按时间kqqjbcuj1#
在启动Python之前,你可以在shell**的帮助下做到这一点:
...之后,
os.environ.get(f'alias__{name}', None)
将返回任何存在的别名,因此您可以将该文本添加到您打算运行的shell命令中,以获得别名本身具有的相同行为。但是,对于一般情况,应该使用导出函数而不是别名;使用
subprocess.Popen('...script goes here...', shell=True, executable=shutil.which('bash'))
将确保所讨论的脚本是用bash执行的,因此可以访问在父进程中运行的bash副本导出的任何函数。