Merge branch 'master' of ssh://soft.dmz.rs/workshops
This commit is contained in:
commit
1e94c730e0
144
slides/shells/shells.md
Normal file
144
slides/shells/shells.md
Normal file
@ -0,0 +1,144 @@
|
||||
# Origin
|
||||
|
||||
- Used as a 'shell' around a bare-ass kernel.
|
||||
- People once considered a basic shell user-friendly.
|
||||
- Once worked as slow printing.
|
||||
|
||||
## Use Cases
|
||||
|
||||
- It's crazy-fast to write.
|
||||
- Try deleting a file in Python.
|
||||
- It's awful for any structured data.
|
||||
|
||||
# Bangs!
|
||||
|
||||
Don't say `#!/bin/bash` if you don't mean it!
|
||||
|
||||
| Bang! | Apraisal |
|
||||
|:------------------------|:--------------|
|
||||
| `#!/bin/bash` | reasonable |
|
||||
| `#!/bin/sh` | sensible |
|
||||
| `#!/bin/dash` | bad idea |
|
||||
| `#!/bin/zsh` | risky |
|
||||
| `#!/bin/ksh` | foolish |
|
||||
| `#!/usr/bin/env bash` | pathetic |
|
||||
| `#!/bin/fish` | madness |
|
||||
| `#!/bin/elvish` | genius |
|
||||
|
||||
Protip: for a faster machine, make `sh` a link to `/bin/dash`.
|
||||
|
||||
`ln -s /bin/dash /bin/dash`
|
||||
|
||||
# Deviant Shells
|
||||
|
||||
## `ksh` (korn shell)
|
||||
|
||||
- made before `bash`
|
||||
- `vi` mode by default (means you're a hacker)
|
||||
- Can be posix compliant with effort
|
||||
|
||||
## `elvish`
|
||||
|
||||
- pure style
|
||||
- built-in browser
|
||||
- Ctrl+i to search for commands in $PATH
|
||||
- Ctrl+n to search for command arguments
|
||||
- Ctrl+l to return to previous locations
|
||||
|
||||
## zsh
|
||||
|
||||
- `for x in 1..10`
|
||||
- great autocompletion
|
||||
|
||||
# Bash Advantages
|
||||
|
||||
- Equality check with "==".
|
||||
* Dash cannot do `if [ $x == 3 ]; then echo y; fi`
|
||||
- `$RANDOM`
|
||||
- Dash cannot use `&>/dev/null`
|
||||
- No history
|
||||
- `$PROMPT_COMMAND`
|
||||
|
||||
## Lists
|
||||
|
||||
```
|
||||
myList+=(*)
|
||||
echo "${myList[0]}"
|
||||
```
|
||||
|
||||
# Functions
|
||||
|
||||
|
||||
```
|
||||
function wotsa(){
|
||||
def="$(curl -s dict://dict.org/define:$1: | \
|
||||
grep -vP '^\d\d\d ')"
|
||||
if [ "$def" = "" ]; then
|
||||
echo no definition
|
||||
else
|
||||
echo "$def" | mdcat -p
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
# Protips
|
||||
|
||||
```
|
||||
"\C- ": shell-expand-line
|
||||
"\C-x": glob-expand-word
|
||||
```
|
||||
|
||||
- `set -e`
|
||||
- `set -x`
|
||||
- `set -o vi`
|
||||
- Ctrl+d
|
||||
- `type $whatever`
|
||||
- `.inputrc`
|
||||
- `PS1=foo`
|
||||
- `^$` for first argument used
|
||||
- `!$` for last argument used
|
||||
|
||||
# Fun with Bash
|
||||
|
||||
- wifi_qr.sh
|
||||
- clean.sh
|
||||
- theme.sh
|
||||
- notflix.sh
|
||||
- clip.sh
|
||||
- vidget.sh
|
||||
|
||||
# Zen Master Foo
|
||||
|
||||
Master Foo once said to a visiting programmer: "There is more Unix-nature in one line of shell script than there is in ten thousand lines of C."
|
||||
|
||||
The programmer, who was very proud of his mastery of C, said: "How can this be?
|
||||
C is the language in which the very kernel of Unix is implemented!"
|
||||
|
||||
Master Foo replied: "That is so.
|
||||
Nevertheless, there is more Unix-nature in one line of shell script than there is in ten thousand lines of C."
|
||||
|
||||
#
|
||||
|
||||
The programmer grew distressed. "But through the C language we experience the enlightenment of the Patriarch Ritchie! We become as one with the operating system and the machine, reaping matchless performance!"
|
||||
|
||||
Master Foo replied: "All that you say is true.
|
||||
But there is still more Unix-nature in one line of shell script than there is in ten thousand lines of C."
|
||||
|
||||
The programmer scoffed at Master Foo and rose to depart.
|
||||
But Master Foo nodded to his student Nubi, who wrote a line of shell script on a nearby whiteboard, and said: "Master programmer, consider this pipeline.
|
||||
Implemented in pure C, would it not span ten thousand lines?"
|
||||
|
||||
#
|
||||
|
||||
The programmer muttered through his beard, contemplating what Nubi had written.
|
||||
Finally he agreed that it was so.
|
||||
|
||||
"And how many hours would you require to implement and debug that C program?" asked Nubi.
|
||||
|
||||
"Many," admitted the visiting programmer. "But only a fool would spend the time to do that when so many more worthy tasks await him."
|
||||
|
||||
"And who better understands the Unix-nature?" Master Foo asked. "Is it he who writes the ten thousand lines, or he who,
|
||||
perceiving the emptiness of the task, gains merit by not coding?"
|
||||
|
||||
Upon hearing this, the programmer was enlightened.
|
||||
|
Loading…
Reference in New Issue
Block a user