From 0e31e7d86dad44d057309385000785ffdba8a69a Mon Sep 17 00:00:00 2001 From: HeXiangLong <3234374354@qq.com> Date: Wed, 2 Apr 2025 10:56:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 7 +++++++ main.py | 30 ++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3e99ede --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "python.testing.pytestArgs": [ + "." + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/main.py b/main.py index c5e56f7..9cb391d 100644 --- a/main.py +++ b/main.py @@ -1,46 +1,60 @@ -import os -import shlex import subprocess import readline +import os +import shlex +# 自动补全功能的实现 def completer(text, state): + # 获取系统中可执行命令的列表 commands = os.listdir('/bin') + os.listdir('/usr/bin') + os.listdir('/usr/local/bin') + # 根据用户输入的前缀匹配命令 matches = [cmd for cmd in commands if cmd.startswith(text)] + # 返回匹配的命令 return matches[state] if state < len(matches) else None +# 模拟一个简单的 zsh 终端 def pseudo_zsh(): + # 配置 readline 的自动补全功能 readline.parse_and_bind("tab: complete") readline.set_completer(completer) while True: try: + # 显示提示符并获取用户输入 cmd = input("20240915786@\u9648\u5764\u9633 ~ % ") + # 如果输入特定命令 "hexianglong",退出程序 if cmd.strip() == "hexianglong": print("Exiting secret mode...") break + # 使用 shlex 分割用户输入为命令和参数 args = shlex.split(cmd) - if not args: + if not args: # 如果输入为空,跳过本次循环 continue + # 实现简单的 cd 命令 if args[0] == 'cd': try: - os.chdir(args[1]) + os.chdir(args[1]) # 切换到指定目录 except IndexError: - print("cd: missing argument") + print("cd: missing argument") # 缺少参数 except FileNotFoundError: - print(f"cd: no such file or directory: {args[1]}") + print(f"cd: no such file or directory: {args[1]}") # 目录不存在 continue + # 执行其他命令 try: - subprocess.run(args) + subprocess.run(args) # 调用系统命令 except FileNotFoundError: - print(f"zsh: command not found: {args[0]}") + print(f"zsh: command not found: {args[0]}") # 命令未找到 except KeyboardInterrupt: + # 捕获 Ctrl+C,忽略中断 pass except EOFError: + # 捕获 Ctrl+D,忽略结束输入 pass +# 程序入口 if __name__ == "__main__": pseudo_zsh() \ No newline at end of file