使用 Python 脚本更改 Shell 中的工作目录
- 2024-11-11 08:27:00
- admin 原创
- 21
问题描述:
我想实现一个用户空间命令,它将接受其中一个参数(路径)并将目录更改为该目录。程序完成后,我希望 shell 位于该目录中。所以我想实现cd
命令,但使用外部程序。
可以在 python 脚本中完成吗?或者我必须编写 bash 包装器?
例子:
tdi@bayes:/home/$>python cd.py tdi
tdi@bayes:/home/tdi$>
解决方案 1:
其他人指出你不能从子级更改父级的工作目录。
但是有一种方法可以实现您的目标——如果您从 shell 函数 cd,它可以更改工作目录。将其添加到您的 ~/.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/$> 前往 tdi
tdi@bayes:/home/tdi$> 前往 tdi
解决方案 2:
这是不可能的。
您的脚本在发出命令的父 shell 生成的子 shell 中运行。
cd
在子 shell 中执行的任何操作都不会影响父 shell。
解决方案 3:
正如 codaddict 所写,子 shell 中发生的事情不会影响父 shell。但是,如果您的目标是向用户展示不同目录中的 shell,您可以始终让 Pythonos.chdir
更改子 shell 的工作目录,然后从 Python 启动新shell。这不会更改原始 shell 的工作目录,但会为用户留下一个不同目录中的目录。
解决方案 4:
cd
是专门(?)作为 shell 内部命令实现的,因为任何外部程序都不能改变父 shell 的 CWD。
解决方案 5:
正如mrdiskodave
在“相当于 shell 'cd' 命令来更改工作目录?”中解释的那样,
有一种技巧可以在纯 Python 中实现所需的行为。我对 mrdiskodave 的答案做了一些修改,使其在 Python 3 中工作:
该
pipes.quote()
功能已移至shlex.quote()
。为了缓解执行期间用户输入的问题,您可以使用退格字符删除任何先前的用户输入
"x08"
。
因此我的改编如下:
import fcntl
import shlex
import termios
from pathlib import Path
def change_directory(path: Path):
quoted_path = shlex.quote(str(path))
# Remove up to 32 characters entered by the user.
backspace = "x08" * 32
cmd = f"{backspace}cd {quoted_path}
"
for c in cmd:
fcntl.ioctl(1, termios.TIOCSTI, c)
解决方案 6:
我将尝试以一种相当简单的方式展示如何将 Bash 终端的工作目录设置为 Python 程序所需的任何路径。
只有 Bash 可以设置其工作目录,因此 Python 和 Bash 都需要例程。Python 程序有一个例程定义为:
fob=open(somefile,"w")
fob.write(dd)
fob.close()
为了方便起见,“Somefile”可以是 RAM 磁盘文件。Bash“mount”将显示 tmpfs 安装在某个地方,例如“/run/user/1000”,因此 somefile 可能是“/run/user/1000/pythonwkdir”。“dd”是所需的完整目录路径名。
Bash 文件如下所示:
#!/bin/bash
#pysync ---Command ". pysync" will set bash dir to what Python recorded
cd `cat /run/user/1000/pythonwkdr`
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件