Compare commits

..

4 Commits

Author SHA1 Message Date
1e94c730e0 Merge branch 'master' of ssh://soft.dmz.rs/workshops 2023-07-03 00:05:13 +02:00
b1cee86b4c
add shell arguments 2023-06-19 18:38:44 +02:00
b60bd5d631
edit shells slides 2023-06-16 02:25:05 +02:00
51dbe77dee
add shell slides 2023-06-16 00:28:08 +02:00

144
slides/shells/shells.md Normal file
View 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.