-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
105 lines (82 loc) · 3.36 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env python3
from os import getpid as get_pid
from os import getppid as get_ppid
from utils.change_current_directory import change_current_directory
from utils.command_not_found import command_not_found
from utils.current_date import current_date
from utils.current_time import current_time
from utils.execute_shell_command import execute_shell_command
from utils.shell_exit import shell_exit
from utils.shell_help import shell_help
from utils.shell_info import shell_info
from utils.is_executable_file import is_executable_file
from utils.parse_command_line import parse_command_line
from utils.user_prompt import user_prompt
from utils.shell_welcome import shell_welcome
def app():
"""The main function which serves as the entry point of the shell application."""
print(shell_welcome())
while True:
# output `user prompt`, read `command line`, and convert `command line` to python dictionary
command_line: str = input(user_prompt()).strip()
command_line_components: dict = parse_command_line(command_line)
command_name: str = command_line_components["command"]
command_arguments: str = " ".join(command_line_components["arguments"])
# select the command based on `command name`
# - `ls` builtin command
if "ls" == command_name:
execute_shell_command(f"ls {command_arguments}")
# - `mkdir` builtin command
elif "mkdir" == command_name:
execute_shell_command(f"mkdir {command_arguments}")
# - `touch` builtin command
elif "touch" == command_name:
execute_shell_command(f"touch {command_arguments}")
# - `pwd` builtin command
elif "pwd" == command_name:
execute_shell_command(f"pwd {command_arguments}")
# - `echo` builtin command
elif "echo" == command_name:
execute_shell_command(f"echo {command_arguments}")
# - `ps` builtin command
elif "ps" == command_name:
execute_shell_command(f"ps {command_arguments}")
# - `clear` builtin command
elif "clear" == command_name:
execute_shell_command(f"clear {command_arguments}")
# - `cd` builtin command
elif "cd" == command_name:
change_current_directory(command_arguments)
# - `pid` builtin command
elif "pid" == command_name:
print(get_pid())
# - `ppid` builtin command
elif "ppid" == command_name:
print(get_ppid())
# - `date` builtin command
elif "date" == command_name:
print(current_date())
# - `time` builtin command
elif "time" == command_name:
print(current_time())
# - `info` builtin command
elif "info" == command_name:
print(shell_info())
# - `help` builtin command
elif "help" == command_name:
print(shell_help())
# - `exit` builtin command
elif "exit" == command_name:
print(shell_exit())
break
# - empty command
elif "" == command_name:
continue
# - executable files
elif is_executable_file(command_name):
execute_shell_command(f"{command_name} {command_arguments}")
# - command not found
else:
print(command_not_found(command_name))
if __name__ == "__main__":
app()