140 lines
2.5 KiB
Markdown
140 lines
2.5 KiB
Markdown
|
---
|
|||
|
Title: How I use bash
|
|||
|
Summary: This is how I use bash, as I presented it at « En attendant la PyCon Fr ».
|
|||
|
---
|
|||
|
|
|||
|
# bash
|
|||
|
|
|||
|
I presented this as a lightnign talk at [« En attendant la PyCon
|
|||
|
Fr »](https://discuss.afpy.org/t/en-attendant-la-pyconfr-du-15-avril-2021/222/),
|
|||
|
there's [a video
|
|||
|
(in french)](https://dl.afpy.org/en-attendant-la-pycon-fr-2020-2021/2021-04%20Bash%20-%20trucs%20&%20astuces%20-%20mdk.mp4).
|
|||
|
|
|||
|
|
|||
|
How to read:
|
|||
|
|
|||
|
When I write `^A` it mean I press `Ctrl-A`, which is noted `C-a`
|
|||
|
(bash/emacs notation).
|
|||
|
|
|||
|
`M-a` means `Meta-a` (it's left alt on current keyboards).
|
|||
|
|
|||
|
|
|||
|
## I avoid singleline prompt
|
|||
|
|
|||
|
Because of the following issue:
|
|||
|
|
|||
|
PS1='$ '
|
|||
|
printf "pouette"
|
|||
|
ls^A
|
|||
|
ls -l^A
|
|||
|
|
|||
|
Issue is: readline have two ways to move at the beginning of a line,
|
|||
|
and have no way to know where the cursor is, and assume the line start
|
|||
|
at column 0.
|
|||
|
|
|||
|
|
|||
|
## Easy, daily, shortcuts
|
|||
|
|
|||
|
### Killing and Yanking from the killing stack
|
|||
|
|
|||
|
- `C-a C-k`: Move to the beginning, then kill the line.
|
|||
|
- `C-y`, `M-y`: Yank and yank pop.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
```
|
|||
|
$ git push origin HEAD^A^Kgit commit -m "FIX"^A^Kgit add -u
|
|||
|
C-y
|
|||
|
Enter
|
|||
|
C-y
|
|||
|
M-y
|
|||
|
Enter
|
|||
|
```
|
|||
|
|
|||
|
### Moving
|
|||
|
|
|||
|
- `C-a` (beginning of line) `C-e` (end of line).
|
|||
|
- `C-p` and `C-n`: like up and down arrows, to browse history.
|
|||
|
|
|||
|
Avoid `C-pC-pC-pC-pC-p` or `↑↑↑↑↑↑`, use `C-r`.
|
|||
|
|
|||
|
|
|||
|
### Fixing typos
|
|||
|
|
|||
|
- `C-t` (swap chars), `M-t` (swap words).
|
|||
|
- `M-l`, `M-u`, `M-c` (lowercase, uppercase, capitalize)
|
|||
|
- `C-g` (abort)
|
|||
|
|
|||
|
|
|||
|
### Cleaning
|
|||
|
|
|||
|
`C-l` (clear screen). Oh, if it's not enough, like after killing `sl`,
|
|||
|
use `reset`, so `ENTER reset ENTER` to ensure you type it in a clear
|
|||
|
line, or `C-a C-k reset ENTER` to avoid executing blindly.
|
|||
|
|
|||
|
|
|||
|
### sudo !!
|
|||
|
|
|||
|
```bash
|
|||
|
$ man bash | grep '!!'
|
|||
|
!! Refer to the previous command. This is a synonym for `!-1'.
|
|||
|
```
|
|||
|
|
|||
|
so:
|
|||
|
```
|
|||
|
$ apt upgrade
|
|||
|
E: ... are you root?
|
|||
|
$ sudo !!
|
|||
|
sudo apt upgrade
|
|||
|
...
|
|||
|
```
|
|||
|
|
|||
|
### Globstar
|
|||
|
|
|||
|
`shopt -s globstar`:
|
|||
|
|
|||
|
```
|
|||
|
$ rm **/*.md
|
|||
|
```
|
|||
|
|
|||
|
same as:
|
|||
|
|
|||
|
```
|
|||
|
$ find -name '*.md' -delete
|
|||
|
```
|
|||
|
|
|||
|
example:
|
|||
|
|
|||
|
```
|
|||
|
sed -i '1i#!/usr/bin/env python3' **/*.py
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
## Other shortcuts I use
|
|||
|
|
|||
|
And I like them for the nice symetry:
|
|||
|
|
|||
|
- `C-f` to move forward a char, `M-f` to move forward a word.
|
|||
|
- `C-b` to move backward a char, `M-b` to move backward a word.
|
|||
|
- `C-d` to delete a char, `M-d` to delete a word.
|
|||
|
|
|||
|
|
|||
|
## Pipelines for the win!
|
|||
|
|
|||
|
```
|
|||
|
$ man bash | grep -C1 C-a
|
|||
|
Commands for Moving
|
|||
|
beginning-of-line (C-a)
|
|||
|
Move to the start of the current line.
|
|||
|
```
|
|||
|
|
|||
|
## Subshells for the win!
|
|||
|
|
|||
|
```
|
|||
|
emacs $(git grep -l PATTERN)
|
|||
|
```
|
|||
|
|
|||
|
# Bonus
|
|||
|
|
|||
|
Those are the same in emacs, save brain space, use emacs.
|