Bash Concepts: Difference between revisions
(→|) |
(→|) |
||
Line 52: | Line 52: | ||
==|== | ==|== | ||
See [[#Pipeline|Pipelines]]. | |||
==|&== | |||
See [[#Pipeline|Pipelines]]. | See [[#Pipeline|Pipelines]]. |
Revision as of 20:24, 25 February 2018
Internal
Metacharacters
Metacharacters are characters that, when unquoted, separate words. These characters have a special meaning to bash and are interpreted and possibly modified before the modified strings are sent to the command as arguments. Also see regular expressions metacharacters. For more details on how bash processes a command line, see "bash Command Line Evaluation Process"
Also see
Space
For bash, a space is a metacharacter that separates a command from its arguments, and arguments from each other.
Single Quotes
Enclosing a string in single quotes tells the shell NOT to interpret any shell metacharacters in the text between quotes: single quotes suppress all types of expansion.
Double Quotes
Double quotes permit parameter and variable expansion but suppress other types of expansion.
Dollar Sign ($)
Exclamation Mark (!)
|
'|' is the "pipe" character, and it is interpreted by bash as a request to set up a pipeline.
&
;
(...)
<
>
Space
Tab
Globbing
Control Operators
A control operator is a sequence of characters that performs a control function. It is one of the following characters or sequences:
|
See Pipelines.
|&
See Pipelines.
||
&
&&
;
;;
(...)
The New Line
Login Shell
A login shell is a shell whose first character of its argument zero is a -, or it was started with the --login option.
Interactive Shell
An interactive shell is a shell started:
- without the -c option
- without non-option arguments
- with the -i option
The interactive shell's standard input and error are both connected to terminals.
$- includes i if the shell is interactive, allowing a script or a startup file to test this state.
Non-interactive Shell
A shell started with -c option.
bash Startup Files
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first executes commands from /etc/profile, if exists.
Them it looks for ~/.bash_profile, ~/.bash_login and ~/.profile in that order. It executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
When a login shell exits, bash executes commands from ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash executes commands from ~/.bashrc, if it exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to execute commands from the specified file instead of ~/.bashrc.
When bash is started in non-interactive mode, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file execute. Bash behaves as if the following command were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the PATH variable is not used to search for the file name.
If any of the files exist but cannot be read, bash reports an error.
Variables
bash Built-In Variables
Command Substitution
Process
Foreground Process
Unless otherwise specified, a process launched by the shell will run in foreground, blocking use of the shell for the duration of the process, because the shells stdin, stdout and stderr are redirected to the process.
A foreground process can be typically stopped by sending SIGINT signal into it, and the shell sends SIGINT when Ctrl-C is pressed.
A foreground process can be typically suspended by sending SIGTSTP signal into it. The shell sends SIGTSTP when Ctrl-Z is pressed. A suspended process can be resumed by executing
fg
in the shell that suspended it.
Background Process
A background process is associated with the specific terminal that started it (the shell process is the parent of the background process), but does not block access to the shell. Instead, it executes in the background, leaving the user able to interact with the system while the command runs. Many background processes can be started by the same shell and can run at the same time.
A process can be launched in background by appending "&" at the end of the command line.The stdout, stderr of the background process are directed to the shell's stdout/stderr, unless they are explicitly redirected.
All background and stopped processes can be listed with:
jobs
Pipeline
A pipeline is a sequence of commands separated by one of the control operators '|' or '|&'
When '|' is used, the stdout of the command is connected via a pipe to the stdin of the next command.
When '|&' is used, both stdout and stderr of the command is connected via a pipe to the stdin of the next command. The effect is equivalent with:
2>&1 |
Command Line Evaluation Process
Tests [...] [[...]]
[...] is part of the shell built-in command test, and it is a synonym for it. It tests the expression between [ ].
The [[...]] construct is the more versatile version of [...], also called the extended test command