Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Introduction to the Bash Shell
Kurt Schmidt
Dept. of Computer Science, Drexel University
December 4, 2019
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Shell–Bash
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Shell as a User Interface
A shell is a command interpreterInterface between a human (or another program) andthe OS
Runs a program (say, ls, or a Solitaire game or Webbrowser)Can establish alternative sources of input anddestinations for output of programs
Is, itself, just another program
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Shell as a Scripting Language
Has features commonly found in languages for structuredprograms
Allow shell scripts to be used as filtersControl flow, variablesControl over all I/O file descriptorsControl over signal handlingThe environment allows context to be established atstartup
Provides a way for scripts to pass information toprocesses w/out using positional parameters
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Bourne Again Shell (bash)
We’ll teach Bash in this courseExtension of the Bourne ShellContains many of the Korn Shell (ksh) extensionsThere are other shells: tcsh (Tenex C Shell), ksh (KornShell), zsh, dash
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
bash Customisation
The shell supports various customisationsSet through shell options or evnironment variables
User promptBindings for command-line editingAliases (shortcuts)Functions – like little scripts1
Other behaviors
1But they run in the current shell
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
bash startup files
Place customisations in startup files/etc/profile – system-wide/etc/bash.bashrc – system-wide~/.bash_profile – user~/.bashrc – user
Read the Bash manpages to see when each is invoked
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Bash set Command
The set builtin with no args displays all shell variablesand functionsCan be used to set various options. E.g.,
-o noclobber – Won’t let re-direct overwrite an existingfile-o ignoreeof – Shell won’t exit on ˆD-o vi – Use vi-like keybindings for editing thecommand line. emacs is the default-n – Dry run. Just parse, but don’t execute. Handy fordebugging scripts-x – Echo on. Shows commands in script as theyexecute
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Interpreting Commands
Shell prints a prompt, awaits a commandWhen the shell gets a line of input
1 It expands aliases (recursively)2 Checks to see if command is a shell builtin (or a
function)3 If not, assumes it is a program (or script) on disk (e.g.,
ls)
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Shell Builtins
A shell builtin is a command the shell will do for youcd, type, pushd, set, pwd, ...
They are fasterThe shell provides builtins for some common diskutilities
echo, printf, testUse a path to invoke the disk utility (/bin/echo)
The builtin type will determine if a command is a builtin,or tell you where the utility is on diskThe help builtin will give you help on any builtin, orshow you all of the the shell builtins
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Running Programs from Disk
Disk programs are run in a subshellThe subshell execs the program
Replaces itself with the program
If the command isn’t a shell builtin, the shell will searchfor a disk utility (using your $PATH)If the command token contains a path, then that utilitywill simply be run
$ /usr/bin/firefox & # kick firefox off in the background$ /usr/bin/python myScript.py # invoke the python interpreter$ ~/bin/cow-sample # Invoke my script to see cows$ ./a.out # run a program I just compiled, in this directory
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Logging Off
Use the exit builtinExits the shellIf it is the login (top-level) shell, then it disconnects youA shell is just another programCan recursively invoke shellsDon’t just disconnect w/out exitingctrl-D (end-of-file) will also log you out
Unless you have the ignoreeof shell option set
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Standard I/O
Shell manages I/OPrograms and scripts run in a subshell
The shell establishes 3 I/O channels:stdin, file descriptor 0, default is the keyboardstdout, file descriptor 1, default is the screenstderr, file descriptor 2, default is the screen
These streams may be redirected to or from another fileCan also be redirected to or from another process
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Terminating Input
stdin is read like any other file1
If stdin is the keyboard, use Ctrl-D (ˆD) to signal EOFMany utilites, filters, will read stdin if not given afilename(s) to open
cat head grep awk sort ...
If it appears a program “isn’t doing anything”, it’spossible that it’s waiting on you
$ grep the # no filenameWhat’s this?Is this the line?Is this the line?That’s not funny.Maybe there should be a lawMaybe there should be a law^D # ctrl-D, EOF
1Sorta. You can’t back up
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Shell Metacharacters
A metacharacter is a characters which has special meaningto the shellHere are some:
Wildcards* ? [ ]
I/O redirection< > |
Others& ; $ # ! \ ( ) " ’ ’
These characters must be escaped or quoted to inhibit theirspecial behavior
$ ls "some file" another\&file ’and;yet;a;third’some file another&file and;yet;a;third
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Wildcards
Also known as name globbing and pattern matching; usedin filename expansion
* – matches 0 or more characters? – matches exactly 1 character[list] – matches any single character from listWildcards are not regular expressions
ls *.cc list all C++ source files in directoryls ?a* list all files whose 2nd letter is ’a’
ls [a-cf]*.jpeg list all JPEGs that start with a, b, c, or fls [!ac-e]*.jpeg list all JPEGs that do not start with a, c,
d, els * Try it with non-empty subdirectories present
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Shell Variables
Called parametersBash uses shell variables to store informationUsed to affect the behavior of the shell, and otherprogramsSimple mechanism, just stores textBash does have arrays and associative arrays (seedeclare builtin)
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Setting & Viewing Parameters
To assign a variable (in sh, ksh, bash)Note, no whitespace around the =
VAR=somethingOTHER_VAR="I have whitespace"
Precede with $ to view (dereference) a parameters:
$ echo $OTHER_VARI have whitespace$ echo "My name is $USER"My name is kschmidt
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Common Parameters
PATH – list of directories searched by shell for diskutilitiesPS1 – primary promptUSER – user’s login nameHOME – user’s home directoryPWD – current working directory
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Other Useful Shell Variables
SHELL – The login shell$$ – The PID of the current shell$? – The return value of the last commandTERM – Terminal type (what the shell thinks the terminalinterface is)HOSTNAME – Machine’s hostname (see uname)EDITOR – Some programs (mutt, sudoedit, git, etc.)might look here, when opening a text fileSHELLOPTS – Status of various Bash options (see theset builtin)
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Command Substitution
Replaces the command with the output of the command$( cmd )
$ echo Today is $(date ’+%d %B’ )04 October
Command can also be enclosed in back-tics, ‘‘cmd ‘
$ echo Today is ‘date ’+%d %B’‘04 October
This is Bourne syntaxTougher on the eyeballs
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
\ – The Escape Character
Use the backslash to inhibit the special meaning (behavior)of the metacharacter that follows.
$ echo $USERkschmidt$ echo \$USER$USER
So, now \ is a metacharacter. Escape it to get just thecharacter:
$ echo a\\ba\b
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
\ Followed by Newline
The backslash, when followed immediately by a newline,effectively removes the newline from the stream
$ echo On the bloody morning after\> One tin soldier rides awayOn the bloody morning afterOne tin soldier rides away
Use quotes, if you want the newline in the output:
$ echo "On the bloody morning after> One tin soldier rides away"On the bloody morning afterOne tin soldier rides away
Better:
$ echo -e "On the bloody morning after\nOne tin soldier rides away"On the bloody morning afterOne tin soldier rides away
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Weak Quoting
Double quotes inhibit all but \‘ $ !1
$ echo "$USER is $USER"kschmidt is kschmidt$ echo "\$USER is $USER"$USER is kschmidt$ echo "I said, \"Well, we shan’t\""I said, "Well, we shan’t"$ echo "It is now $(date ’+%H:%M’)"It is now 19:27
1If history expansion is enabled
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Strong Quoting
Single quotes preserve the literal value of all enclosedcharacters
May not contain a single quote (can’t be escaped)
$ echo ’I said, "Wait!"’I said, "Wait!"$ echo ’My name is $USER’My name is $USER
Consider
$ echo ’I said, "I can’\’’t be there."’I said, "I can’t be there."
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
String Concatenation
Strings are concatenated simply by juxtapositionYou needn’t restrict yourself to one set of quotes
Use the convenient quotes for a part of the string, otherquotes for another bit
$ echo ’$USER is ’"$USER"$USER is kschmidt$ echo ’He said it’\’’s fine, ’"$USER"He said it’s fine, kschmidt
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Redirecting I/O
The shell can read stdin from sources other than yourkeyboard
Input can be redirected from a fileInput can even be taken from the output of anotherprocess, though a pipe
Similarly, stdout (and stderr) can go places other thanyour screen
Redirected to a filePiped to another process to read as input
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Redirecting stdout
stdout is file descriptor 1Use > after a command (and its arguments) to redirectthe output to a file:
$ ls > list.out
If list.out previously existed it will be truncated (gone)Use » to append the output to the file.
$ ls >> list.out
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Using echo to Write Files
echo (builtin, and disk utility) writes a line to stdout-n suppresses the newline-e permits expansion of escape chars (\t, \n, etc.)
The printf utility is handy for formatting output
$ idx=127$ echo "First line" > "$logfile"$ echo "Another line" >> "$logfile"$ printf ’%-15s formatted line %5x\n’ "$USER" $idx >> "$logfile"$ cat "$logfile"First lineAnother linekschmidt formated line 7f
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Create Files with cat
cat, in the absence of command-line args, reads fromstdin, writes to stdoutWe can use this to write to a file
Use ^D (Ctrl-D) to end input
$ cat > "$ofile"This is line oneAnother line
Okay, that’s enough^D
Handy way to concatenate files:
$ cat part1 > result$ cat part2 >> result
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Redirecting stderr
stderr is file descriptor 2, so:
$ gcc buggy.c 2> error.log$ grep ’[Vv]era’ *.html > results 2> error.log
To send both to the same place:
$ find . -name ’core*’ > core.list 2>&1
Note, the order mattersBash has syntactic sugar for this move:
$ find . -name ’core*’ &> core.list
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Redirecting stdin
< redirects stdin from a fileFile descriptor 0
$ sort < nums$ mail -s"Meaningful subject" $id < msg
You can do both
$ sort < nums > sortednums 2> sort.errors$ tr ’a-z’ ’n-za-m’ < code.rot13 > decoded
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Here Documents/Strings
Here documents are helpful in scriptsInput is redirected using « [-]WORD
WORD signals end of input
We’ll examine these further in a subsequent lecture
$ cat << EOSDear $NAME:I am writing this slowly, since I know you can’t read fast.
It was so windy here Tuesday the chicken laid the same egg$EGG_CNT times.EOS
Here strings are convenient on the command line:
$ bc -l <<< "$x + s($d)"
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Unnamed Pipes
A redirector links a process to a fileA pipe links a process to a processIt’s a stream of data
Data written to stdout by prog1 is read on stdin byprog2Much faster than writing, then reading, intermediatefiles
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Asking for a Pipe
Separate 2 commands with |
The shell does all the work
$ du -s * | sort -n$ du -s * | sort -n > sorted.lst
Processes can be strung together with pipes:
$ du -s * | sort -nr | head -n10 > 10_bigest_files
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
The Unix Philosophy
The use of pipes and other features to combine“small, sharp tools” to accomplish larger tasks– Ken Thompson (father of Unix)
“...at its heart is the idea that the power of a systemcomes more from the relationship among programsthan from the programs themselves.”– Brian Kernighan & Rob Pike
“This is the Unix philosophy: Write programs thatdo one thing and do it well. Write programs towork together. Write programs to handle textstreams, because that is a universal interface.”– Doug McIlroy (inventor of the Unix pipe)
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
history Bash builtin
history shows an enumerated list!n executes the nth command
!! executes the last command!-n works backwards, from last command!str – last command that starts w/str^src^targ^ substitute targ for src in last command
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Searching the History
You might find history | grep str to be usefulYou might also read up on the fc builtin
I have, in my .bashrc:alias r=’fc -s’so I can user strto execute the last command that started with str
I often use the Readline searchIn Vim modeESC / regex
In Emacs modeC-r regex
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Processes, Jobs
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Process Control
Processes are run in a subshellSubshells inherit exported environmentEach process has an ID (PID) and a parent (PPID)Use the ps utility to look at processes:
$ psPID TTY TIME CMD350 pts/4 00:00:00 bash
22251 pts/4 00:00:00 vim22300 pts/4 00:00:00 ps
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Process Control (cont.)
Use the -f option for a long (full) listing
$ ps -fUID PID PPID C STIME TTY TIME CMDkschmidt 350 349 0 10:06 pts/4 00:00:00 -bashkschmidt 22251 350 0 17:32 pts/4 00:00:00 vim myHomeworkkschmidt 22437 350 0 17:36 pts/4 00:00:00 ps -f
Use the -e option to see all of the processes (not justyours)1
1Caution: The entire command line, command plus args, are visiblehere. Be careful what you type in the shell.
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Killing a process
The kill (built-in and utility) sends a signal to aprocess
By default, sends the SIGTERM (signal 15)Send SIGKILL (9), won’t be ignored, but, no cleanup
To kill a process using its PID:
$ kill 29940$ kill -9 29940 # if it ignored your previous request
See also pgrep and pkill
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Job Control
The shell allows you to manage jobsPlace a job in the backgroundMove a job to the foregroundSuspend a jobKill a jobUse jobs to view current jobs (in a given shell)
$ jobs[2] Running evince unix.pdf & (wd: ~/CS265/Lectures/Unix)[4] Running gimp & (wd: ~/public_html/CS265/Lectures/Unix)[6]- Running soffice CS265/Lectures/Unix/intro.ppt & (wd: ~)[7]+ Stopped vi hello.tex
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Job Control
When a process is running, the shell is blockedSo, we run, e.g., GUI programs in the backgroundProcesses that might take a while we can place in thebackgroundPlace a & after a command to run it in the background:
$ firefox &$ evince unix.pdf &$ find ~/ -type f -mtime -1 > find.out # this might run a while$ # Save output to a file
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Suspending and Resuming a Process
Use ˆZ to suspend the process in the foregroundUse fg to bring the most recent process back to theforeground
Working in an editor, I’ll save, ˆZ out, compile, then fgback to my editing session
Or, type %n, where n is the index, from the job listingUse bg to put the most recently suspended process intothe background
$ evince unix.pdf # Whoops! Forgot to put in background^Z # Suspend evince$ bg # Set it running in the background
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Killing a job
You can kill a job much as you might a processSIGTERM is often like closing the window, or choosing"Quit"
SIGKILL, on the other hand, can’t actually be trappedThe plug will be pulled on the process, no chance toclean upNot really nice
Specify a job using %:
$ kill %4 # Give it a chance to exit itself$ kill -n9 %4 # Just pull the plug
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Command Execution
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Command Execution
Commands in a sequence can be joined several ways:SequencedGroupedSubshell GroupConditional
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Command Sequences
Commands to be executed seriallyNo direct relationship between themCommands can be separated by a newline or ;
Note, \n is a metacharacter
cmd1 ; cmd2 ; cmd 3
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Grouped Commands
{ cmd1 ; cmd2 ; cmd2 ; }Sequences can be grouped using {}List must be terminated by a ;Runs in the context of the current shellUseful for redirecting I/OReturn value is the status of the last commandexecuted
$ echo a ; echo b ; echo c > outab$ cat outc$ { echo a ; echo b ; echo c ; } > out$ cat outabc
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Grouped Commands for Subshell
( cmd1 ; cmd2 ; cmd2 )
Sequences grouped with ()
Also handy for redirecting I/ORuns in a subshell
Can be run in the backgroundNo changes persist
Return value is the status of the last commandexecuted
$ y=30 ; ( y=20 ; echo $y ) ; echo $y2030
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Conditional Execution
Operators && and ||
Conditional execution depends on the return value ofthe command on the leftThis value available to the caller (parent shell)
Look at special variable $? for return status of lastcommand
Value on [0, 255]1
Zero (0) signals success; is trueNow you know why we told you to put return( 0 ); atthe end of your programsWe enumerate errors (failure), starting at 1
&& and || have the same precedence, associateleft-to-right
1Though I’ve used a shell that used only 7 bits
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Conditional Execution Operators
cmd1 && cmd2cmd1 is executed firstIf cmd1 succeeds, cmd2 is executed
cmd1 || cmd2cmd1 is executed firstOnly if cmd1 fails is cmd2 executed
$ cp file1 file2 && echo "Copy succeeded"Copy succeeded$ cp no_such_file file2 2> /dev/null || echo "Copy failed"Copy failed
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Subshells
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Subshells
A child process launched by a shellA separate instance of the command processor (theshell)Inherits copies of a subset of the parent’s environment
Only those items marked for export:export myVarOnce marked for export, remains so marked
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Subshells – Who Gets ’Em?
Shell builtins are handled by that shell (no child)Functions execute in the current contextScripts run in a subshellChild shell forked off for an external process (diskprogram)
Child execs process
Statements inside parentheses run in the samesubshell1
1Maybe. Bash seems to emulate a subshell these days. PID, e.g., isthe same
Introduction tothe Bash Shell
Kurt Schmidt
Shell–Bashset, Options
Builtins
Metacharacters
Parameters
CommandSubstitution
Quoting, Escaping
I/O Redirection
Pipes
Command History
Processes,Jobs
CommandExecution
Subshells
Subshells – Environment Variables
Exported variables (functions, aliases) are copied intothe subshellChanges made to the evironment in a subshell do notpersist upon exitVariables (functions, etc.) created in the subshell will begone at exit
$ myA=chocolate$ ( myA=strawberry ; echo $myA ; lowerB=Jupiter )strawberry$ echo $myAchocolate$ echo "\$lowerB is: $lowerB"$lowerB is: