使用python脚本更改shell中的工作目录

2024-06-16 13:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想实现一个userland命令,该命令将获取它的一个参数(path)并将目录更改为该dir。程序完成后,我希望shell位于该目录中。所以我想用外部程序实现cd命令

它可以在python脚本中完成,还是我必须编写bash包装器

例如:

tdi@bayes:/home/$>python cd.py tdi
tdi@bayes:/home/tdi$>

Tags: pathpy命令程序目录脚本bashhome
3条回答

这是不可能的

脚本在发出命令的父shell生成的子shell中运行

在子shell中执行的任何cd操作都不会影响父shell

其他人指出,不能将父目录的工作目录从子目录更改为子目录

但是有一种方法可以实现您的目标——如果您使用shell函数,它可以改变工作目录。将此添加到~/.bashrc:

go() {
    cd "$(python /path/to/cd.py "$1")"
}

脚本应打印要更改到的目录的路径。例如,这可能是您的cd.py:

#!/usr/bin/python
import sys, os.path
if sys.argv[1] == 'tdi': print(os.path.expanduser('~/long/tedious/path/to/tdi'))
elif sys.argv[1] == 'xyz':  print(os.path.expanduser('~/long/tedious/path/to/xyz'))

然后你可以做:

tdi@bayes:/home/$> go tdi
tdi@bayes:/home/tdi$> go tdi

正如codaddict所写,在子shell中发生的事情不会影响父shell。但是,如果您的目标是为用户提供不同目录中的shell,那么您可以让Python使用os.chdir更改子shell的工作目录,然后从Python启动一个新的shell。这不会更改原始shell的工作目录,但会将用户的工作目录保留在不同的目录中

相关问题 更多 >