ノート#
$_ # 前の引数
!! # 前のコマンド
$? # コマンドの終了コード
$# # 引数の数
$@ # すべての引数
$$ # シェル自体のPID
$0 # 自身のファイル名
フォルダを作成して移動する
# mcd.sh
mcd(){
mkdir -p "$1"
cd "$1"
}
source mcd.sh
mcd test
# example.sh
#!/bin/bash
echo "Start program at $(date)" # 日付が置き換えられます
echo "Running program $0 with $# arguments with pid $$"
for file in "$@";do
grep foobar "$file" > /dev/null 2> /dev/null
# パターンが見つからない場合、grepは終了ステータスを持ちます
# STDOUTとSTDERRをnullレジスタにリダイレクトします..
if [[ "$?" -ne 0 ]]; then
echo "File $file does not have any foobar, adding one"
echo "# foobar" >> "$file"
fi
done
コマンドの使用方法を確認する:
- tldr よりわかりやすい
sudo apt-get install tldr
mkdir -p ~/.local/share/tldr
tldr -u
ファイルを検索する
- fd
sudo apt-get install fd-find
sudo ln -s $(which fdfind) /usr/bin/fd
コードを検索する
- riggrep(rg)
sudo apt-get install riggrep
# requestsライブラリを使用しているすべてのファイルを検索する
rg -t py 'import requests'
# shebangを書いていないすべてのファイル(隠しファイルを含む)を検索する
rg -u --files-without-match "^#!"
# fooの文字列を検索し、それに続く5行を表示する
rg foo -A 5
# マッチした統計情報を表示する(マッチした行とファイルの数)
rg --stats PATTERN
一般的なフジツケツール
- fzf
sudo apt-get install fzf
ps aux | fzf
fzf --query "sh"
フォルダのナビゲーション
- fasd
- autojump
- tree
- broot
- nnn
- ranger
練習#
現在の位置を保存する
#!/bin/bash
marco(){
echo $(pwd) > ~/dev/class/missing-semester/marco_history.log
echo "save pwd $(pwd)"
}
polo(){
cd "$(cat ~/dev/class/missing-semester/marco_history.log)"
}
#!/bin/bash
marco() {
export MARCO=$(pwd)
}
polo() {
cd "$MARCO"
}
エラーをデバッグして出力をキャプチャする
# buggy.sh
#!/usr/bin/env bash
n=$(( RANDOM % 100 ))
if [[ n -eq 42 ]]; then
echo "Something went wrong"
>&2 echo "The error was using magic numbers"
exit 1
fi
echo "Everything went according to plan"
# debug_while.sh
#!/usr/bin/env bash
count=1
while true
do
./buggy.sh &>> out.log
if [[ $? -ne 0 ]]; then
# cat out.log
echo "failed after $count times"
break
fi
((count++))
done
# debug_for.sh
#!/usr/bin/env bash
for ((count=1;;count++))
do
./buggy.sh &>> out.log
if [[ $? -ne 0 ]]; then
# cat out.log
echo "failed after $count times"
break
fi
done
# debug_until.sh
#!/usr/bin/env bash
count=0
until [[ "$?" -ne 0 ]];
do
count=$((count+1))
./buggy.sh &>> out.log
done
# cat out.log
echo "found error after $count runs"
フォルダ内のすべての HTML ファイルを再帰的に検索し、それらを zip ファイルに圧縮する
mkdir -p html_root/html
touch html_root/{1..10}.html
touch html_root/html/xxxx.html
fd --extension html | xargs -d '\n' tar -cvzf html.zip
フォルダ内で最近使用されたファイルを再帰的に検索するコマンドまたはスクリプトを作成する
find -type f -print0 | xargs -0 ls -lt | head -1
# find -print0 は、クエリの各結果の後にNULL文字を追加し、デフォルトの改行文字を置き換えます
# xargs -0 xargsコマンドはNULLを区切り文字として使用します