0

我正在尝试从 python 脚本(运行 Python 2.7.1)为 tcsh 创建别名。创建别名后,我想在运行 python 脚本的同一个 shell 中使用它们。

我试过了:

os.system('alias test "echo test"')

但我收到以下错误:

sh: line 0: alias: test: not found
sh: line 0: alias: echo test: not found

然后我尝试了:

os.system(r"""/bin/csh -i -c 'alias test "echo test"'""")

然后没有发生错误,但别名没有注册,因此我无法使用它。

我正在寻找的结果是这样的:

tcsh>python my_script.py
tcsh>test
test

谢谢!

4

2 回答 2

2

os.system在子shell(看起来就是bourne shell)中执行该命令,因此即使您的语法正确alias test="echo test",它也不会在调用后持续存在(因为子shell关闭)。

但这似乎是一个 XY 问题。你问的是 Y - 你想到的解决方案,而不是 X - 你的问题。

如果您只是想一次创建一堆别名,为什么不使用 c-shell 脚本!?(为什么你用 c-shell 折磨自己完全是另一回事)。

于 2013-01-01T11:55:34.297 回答
1

你的 python 脚本不能在你的 shell 上下文中执行任何东西。虽然您可以使用subprocess.call(..., shell=True)它,但它会使用的外壳,因此不会更新您现有的外壳。

做你想做的唯一方法是让你的 python 脚本将有效的 shell 命令写入标准输出,然后,而不是仅仅执行它,你需要让你的 shell 评估你的 python 脚本的输出。

于 2013-01-01T11:53:49.940 回答