import os
import sys
import shlex
import getpass
import socket
import signal
import subprocess
import platform
from func import *
built_in_cmds = {}
def register_command(name, func):
built_in_cmds[name] = func
def init():
"""
æ³¨åææçå½ä»¤
"""
register_command("cd", cd)
register_command("exit", exit)
register_command("getenv", getenv)
register_command("history", history)
def shell_loop():
status = SHELL_STATUS_RUN
while status == SHELL_STATUS_RUN:
# æå°å½ä»¤æç¤ºç¬¦ï¼å½¢å¦ `[@ ]$`
display_cmd_prompt()
# å¿½ç¥ Ctrl-Z æè
Ctrl-C ä¿¡å·
ignore_signals()
try:
# 读åå½ä»¤
cmd = sys.stdin.readline()
# è§£æå½ä»¤
# å°å½ä»¤è¿è¡æåï¼è¿åä¸ä¸ªå表
cmd_tokens = tokenize(cmd)
# é¢å¤ç彿°
# å°å½ä»¤ä¸çç¯å¢åé使ç¨çå®å¼è¿è¡æ¿æ¢
# æ¯å¦å° $HOME è¿æ ·çåéæ¿æ¢ä¸ºå®é
å¼
cmd_tokens = preprocess(cmd_tokens)
# æ§è¡å½ä»¤ï¼å¹¶è¿å shell çç¶æ
status = execute(cmd_tokens)
except:
# sys.exc_info 彿°è¿åä¸ä¸ªå
å«ä¸ä¸ªå¼çå
ç»(type, value, traceback)
# è¿ä¸ä¸ªå¼äº§çäºæè¿ä¸æ¬¡è¢«å¤ççå¼å¸¸
# èæä»¬è¿éåªéè¦è·åä¸é´çå¼
_, err, _ = sys.exc_info()
print(err)
def main():
# 卿§è¡ shell_loop 彿°è¿è¡å¾ªç¯çå¬ä¹åï¼é¦å
è¿è¡åå§å
# å³å»ºç«å½ä»¤ä¸å½æ°æ å°å
³ç³»è¡¨
init()
# å¤çå½ä»¤ç主ç¨åº
shell_loop()
if __name__ == "__main__":
main()