C-Shell is a fully functional Linux shell that supports a wide range of functionalities, including semicolon-separated commands, piping, redirection, and all basic Linux commands. It can execute both foreground and background processes.
pwd: Prints the present working directory.cd: Changes the directory based on the flags given.cd,cd .,cd ..,cd ~,cd <directory>
ls: Lists the contents of a particular directory based on the flags given.ls,ls -a,ls -l,ls -al,ls -la,ls <directory>
echo: Prints a message on the terminal.echo <"Hello World">
pinfo: Lists the details of a particular process (may be based on a process ID that is given).pinfo,pinfo <pid>
- Foreground Processes: Processes that require the terminal to halt until their completion (e.g.,
vi,emacs). - Background Processes: Processes that run simultaneously without interrupting the terminal (e.g.,
emacs &).
- Input-output redirection: Redirects input or output to appropriate files (e.g.,
cat file1.txt > file2.txt,sort < sort.txt > sorted.txt). - Piping commands: Pipes two or more commands together (e.g.,
cat test.txt | grep a). - Piping with redirection: Combines piping and redirection (e.g.,
sort < sort.txt | grep a | wc > lines.txt).
setenv: Sets new environment variables (e.g.,setenv a 15).unsetenv: Unsets an environment variable (e.g.,unsetenv a).
jobs: Prints all background jobs.kjob: Sends a signal to a particular job number (e.g.,kjob 1 9).fg: Brings a running or a stopped background job with the given job number to the foreground (e.g.,fg 1).bg: Changes a stopped background job to a running background job (e.g.,bg 1).overkill: Kills all background processes at once.
- Supports CTRL + C to interrupt processes.
To run the shell, execute the following commands:
make ./a.outTo exit from the shell, use the command
quitThe "Pseudo Home" directory for the shell is the directory in which the executable ./a.out resides. If the executable is being run from a different directory, specify the corresponding path.
-
main.c:prompt(): Prints the shell prompt.loop(): Runs the main loop of the shell.extract_command(): Extracts the command as an array.piping(): Checks for piping in the command.red_flag_check(): Checks for redirection flags.
-
pwd.c:pwd(): Prints the present working directory.
-
ls.c:- Supports flags -a, -l, -la, -al. Can list contents of a specified directory.
ls_a(): Lists files and directories, including hidden files.ls_l(): Lists detailed information about files and directories, excluding hidden files.ls_al(): Lists detailed information about files and directories, including hidden files.ls_basic(): Lists all files and directories.ls_call(): Driver function to choose amongst the above functions.flag_check(): Returns the correct flag given in the command.
-
cd.c:cd(): Changes the directory based on the provided path.
-
echo.c:echo_func(): Prints a string argument on the terminal.
-
pinfo.c:pinfo(): Provides details about currently active/running processes.
-
foreground.c:foreground(): Runs a child process in the foreground.
-
background.c:background(): Runs a child process in the background.
-
history.c:update_hist(): Adds a new command to the shell's history.print_hist(): Prints the history of commands.
Note: Background processes for built-in commands are not supported.