Update 'posix_shell.md'
parent
489c8fbeee
commit
77770b3b35
|
@ -15,7 +15,7 @@ passing the flag `-h` or `--help` will usually print some information.
|
||||||
I find myself consulting these constantly because nobody is expected
|
I find myself consulting these constantly because nobody is expected
|
||||||
to remember everything beyond the basics and it’s usually faster than googling it.
|
to remember everything beyond the basics and it’s usually faster than googling it.
|
||||||
|
|
||||||
If you are trying to learn how to use the shell, I encourage you to start
|
If you are trying to learn how to use the shell, I recommend you start
|
||||||
with the examples section at the end and work your way backwards from there
|
with the examples section at the end and work your way backwards from there
|
||||||
to figure out what they do.
|
to figure out what they do.
|
||||||
I also highly recommend you check the manuals or help information for
|
I also highly recommend you check the manuals or help information for
|
||||||
|
@ -29,29 +29,59 @@ operating system as well as running scripts.
|
||||||
To facilitate this, the shell runs the programs the user/script specifies
|
To facilitate this, the shell runs the programs the user/script specifies
|
||||||
and deals with the output.
|
and deals with the output.
|
||||||
|
|
||||||
|
**Working Directory**
|
||||||
|
|
||||||
|
A shell (or any process for that matter) is always running inside a specific directory
|
||||||
|
on the file system, the so-called working directory.
|
||||||
|
It is relevant when determining where files specified by relative path are located.
|
||||||
|
|
||||||
|
There are two kinds of file paths in the UNIX world: relative and absolute.
|
||||||
|
Absolute paths refer to a fixed location on the file system and start with a `/`.
|
||||||
|
Relative paths refer to a location relative to the current working directory and cannot start with a `/`.
|
||||||
|
Relative paths are just the equivalent of an absolute path with the working directory cut off.
|
||||||
|
In many cases, just the name of a file or subdirectory inside the working directory is used.
|
||||||
|
|
||||||
|
You can change to another working directory using `cd` (change directory) like so: `cd PATH_TO_DIRECTORY`.
|
||||||
|
When no path is specified, `cd` will take you to the current user’s home directory (usually...).
|
||||||
|
|
||||||
**Streams**
|
**Streams**
|
||||||
|
|
||||||
Normally, there are two output streams and one input stream for a running program:
|
Normally, there are two output streams and one input stream for a running program:
|
||||||
Standard output (stdout), standard error (stderr), standard input (stdin).
|
Standard output (stdout), standard error (stderr), and standard input (stdin).
|
||||||
By default, they are passed to the stdout, stderr, and stdin of the shell,
|
By default, they are passed to the stdout, stderr, and stdin of the shell,
|
||||||
which will end up in your terminal when you run a shell interactively.
|
which will end up in your terminal when you run a shell interactively.
|
||||||
There are two notable exceptions to this which you can specify:
|
There are two notable exceptions to this which you can specify:
|
||||||
|
|
||||||
1. Reditects: You can send the output of a command to a file instead of
|
**Redirects**: You can send the output of a command to a file instead of
|
||||||
the standard output/error streams.
|
the standard output/error streams.
|
||||||
`COMMAND > FILE` redirects stdout of COMMAND into FILE.
|
|
||||||
`COMMAND 2>FILE` redirects stderr into FILE.
|
- `COMMAND > FILE` redirects stdout of COMMAND into FILE.
|
||||||
`COMMAND 2>&1` redirects stderr into stdout.
|
- `COMMAND 2>FILE` redirects stderr into FILE.
|
||||||
You can have multiple redirects per command though more than two
|
- `COMMAND 2>&1` redirects stderr into stdout.
|
||||||
usually don’t make sense.
|
|
||||||
|
You can have multiple redirects per command though more than two usually don’t make sense.
|
||||||
The most common example of this is redirecting stderr to stdout and
|
The most common example of this is redirecting stderr to stdout and
|
||||||
the combined stdout into a file like so: `COMMAND > FILE 2>&1`.
|
the combined stdout into a file like so: `COMMAND > FILE 2>&1`.
|
||||||
|
|
||||||
2. Pipes: The output of one command can be used as the input of another:
|
**Pipes**: The output of one command can be used as the input of another:
|
||||||
`COMMAND | OTHER_COMMAND`
|
`COMMAND | OTHER_COMMAND`
|
||||||
|
|
||||||
**Variables**
|
**Variables**
|
||||||
|
|
||||||
There are two kinds of
|
There are two kinds of variables that you can deal with on the shell, let’s call them
|
||||||
|
shell variables and environment variables. They behave the same when interacting with them
|
||||||
|
on the shell but shell variables are only available in the shell whereas environment variables
|
||||||
|
are handed to a new process when it is spawned.
|
||||||
|
|
||||||
|
The shell can set environment variables for its child processes and it itself has variables
|
||||||
|
from the environment it launched with. The environment it launched with is passed on
|
||||||
|
to the processes it spawns.
|
||||||
|
|
||||||
|
Shell variables can be set using `VARIABLE=VALUE`.
|
||||||
|
They can be added to the environment of subsequent commands using `export VARIABLE`.
|
||||||
|
To alter the environment for just one command, prepend it with the variable like so: `VARIABLE=VALUE COMMAND`.
|
||||||
|
Variables can be unset using `unset VARIABLE`.
|
||||||
|
|
||||||
exit code
|
exit code
|
||||||
if, esle
|
if, esle
|
||||||
while, for
|
while, for
|
||||||
|
@ -59,14 +89,16 @@ pipes, redirects
|
||||||
ctrl-c
|
ctrl-c
|
||||||
|
|
||||||
*Builtin commands:*
|
*Builtin commands:*
|
||||||
- `cd` [change directoy] A shell (or any process for that matter) is always working from a specific working directory. Pretty much self-explanatory what this does.
|
|
||||||
- `exit` exit (optionally with an exit code though that feature is more useful for scripts)
|
- `exit` exit (optionally with an exit code though that feature is more useful for scripts)
|
||||||
- `export` make the given shell variable an environment variable
|
|
||||||
- `unset` unset a variable
|
|
||||||
- `jobs` show programs that are currently running in the background
|
- `jobs` show programs that are currently running in the background
|
||||||
- `fg` get a program from the background in the foreground
|
- `fg` get a program from the background in the foreground
|
||||||
|
wait
|
||||||
|
|
||||||
__Basic commands:__
|
__Basic commands:__
|
||||||
|
- `sh`
|
||||||
|
- `export`
|
||||||
|
- `unset`
|
||||||
|
- `cd` [change directory] (see "Working Directory" section)
|
||||||
- `pwd` [print working directory] self-explanatory
|
- `pwd` [print working directory] self-explanatory
|
||||||
- `ls` [list] Get a listing of the specified directory. If none given, the current directory is used.
|
- `ls` [list] Get a listing of the specified directory. If none given, the current directory is used.
|
||||||
- `cat` [concatenate] Originally created to concatenate files, it is most commonly used to print the contents of a file to the standard output. It takes file paths as arguments.
|
- `cat` [concatenate] Originally created to concatenate files, it is most commonly used to print the contents of a file to the standard output. It takes file paths as arguments.
|
||||||
|
|
Loading…
Reference in New Issue