2024-06-16 13:16:16 发布
网友
我想实现一个userland命令,该命令将获取它的一个参数(path)并将目录更改为该dir。程序完成后,我希望shell位于该目录中。所以我想用外部程序实现cd命令
cd
它可以在python脚本中完成,还是我必须编写bash包装器
例如:
tdi@bayes:/home/$>python cd.py tdi tdi@bayes:/home/tdi$>
这是不可能的
脚本在发出命令的父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的工作目录,但会将用户的工作目录保留在不同的目录中
os.chdir
这是不可能的
脚本在发出命令的父shell生成的子shell中运行
在子shell中执行的任何
cd
操作都不会影响父shell其他人指出,不能将父目录的工作目录从子目录更改为子目录
但是有一种方法可以实现您的目标——如果您使用shell函数,它可以改变工作目录。将此添加到~/.bashrc:
脚本应打印要更改到的目录的路径。例如,这可能是您的cd.py:
然后你可以做:
正如codaddict所写,在子shell中发生的事情不会影响父shell。但是,如果您的目标是为用户提供不同目录中的shell,那么您可以让Python使用
os.chdir
更改子shell的工作目录,然后从Python启动一个新的shell。这不会更改原始shell的工作目录,但会将用户的工作目录保留在不同的目录中相关问题 更多 >
编程相关推荐