|
|
1
57
如果您需要的别名是在~/.bashrc中定义的,那么它不会运行,原因如下: 1)必须给“shell”关键字arg:
否则,给定的命令将用于查找可执行文件,而不是传递给shell,而shell将扩展别名和函数等内容。 2)默认情况下,subprocess.call和friends使用'/bin/sh'外壳。如果这是要调用的bash别名,则需要使用“executable”关键字arg告诉子进程使用bash而不是sh:
3)但是,/bin/bash不会源代码~/.bashrc,除非以“交互式”shell(带“-i”)启动。不幸的是,不能传递executable='/bin/bash-i',因为它认为整个值是可执行文件的名称。因此,如果您的别名是在用户的正常交互启动中定义的,例如在.bashrc中,那么您将不得不使用以下替代形式调用该命令:
|
|
|
2
20
你需要设置
别名是shell特性(例如,它们由shell定义和解释)。
但是,shell(/bin/sh)是非交互执行的,因此没有
如果不愿意在python脚本中使用完全扩展的命令,则必须使用
|
|
|
3
3
建议的解决方案是 使用 定义功能的别名 唯一地 对于交互使用(甚至在那时,shell函数在许多方面都是优越的)。 将别名重构为一个独立的脚本,并像任何其他外部命令一样调用它。 更详细地说,如果你有
您可以通过将它转换为一个函数来改进它,这样它就不会污染您的全局命名空间
或者把它保存为
(这在子进程中运行,因此
(当然,如果
这是常见的常见问题。 |
|
|
4
2
我稍微修改了乔纳森的理由,使之生效。做一个
和
|