bash
ランキング参加中プログラミングランキング参加中Linux {"no":176026, "text":"aiueo"} {"no":26028, "text":"2024-07-20"} {"no":3030, "text":"田中"} こんな感じのJSONの並んだテキスト*1を、テキストのままソートしたい。 幸い先頭が {"no":数値, となっ…
ランキング参加中Linuxランキング参加中プログラミング シンプルな書き方 SH_DIR=$(realpath $(dirname $0)) 引数 $0 にはスクリプト名が入っているので、ディレクトリを切り出す 相対パスで実行しているときは 相対パス名が入るので realpath で正規化する …
lsで見たら、ファイル名が無いファイルがあった。 どういうことかと思ったが、テキストを選択するとファイル名っぽいのがあるので、表示色がおかしくなっているだけだったとわかった。 暫定的に、DIR_COLORSを編集し、無理やり見えるようにした /etc/DIR_COL…
シェル変数UIDを使う シェル変数UIDには実ユーザIDが入っている 0ならroot #!/bin/bash if [ "$UID" != "0" ]; then echo "root以外では実行できません" exit 1 fi
Cygwinで hello.exe を実行するときに、 bash上で ./he まで入力してtabを押しても ./hello で止まってしまって ./hello.exe とならない。 コマンドの引数のときの補完では ちゃんと hello.exe まで出る。 別に ./hello で普通に実行できるからいいんだけど…
a1.txt を a2.txt~a100.txt に複製する。 for i in a{2..100}.txt; do cp a1.txt $i; done for文で回るやつ。 わかりやすい。 echo a{2..100}.txt | xargs -n1 cp a1.txt xargsを使う。 誤解を招きやすい。
atmarkit.itmedia.co.jp #!/bin/bash for ((i=0; i<1000000; i++)); do echo $i done この書き方ぜんぜん知らなかった。 超直感的じゃん。 dashでは使えない
正規表現を "" などで囲わない 空白を検索できない ホワイトスペースを判定できない 最短マッチしない 正規表現を "" などで囲わない ""で囲うと正規表現で無くなるっぽい A="abcdefg" # OK [[ $A =~ (abc) ]] && echo ${BASH_REMATCH[1]} # abc # NG [[…
bash は、シェルスクリプトの実行中に適時シェルスクリプトを読み込みます。 https://www.iimc.kyoto-u.ac.jp/services/comp/pdf/file_loss_insident_20211228.pdf なにそれこっわ。 そんな仕様知らなかった #!/bin/bash echo start sleep 30 このプログラム…
エスケープシーケンスで色を出すやつ \e[48;5;Xm X:0~255 で背景色を指定 \e[38;5;Xm X:0~255 で文字色を指定 #!/bin/bash for x in {0..15}; do for y in {0..15}; do n=$((x*16+y)) printf "\e[48;5;%dm %3d\e[0m" $n $n done echo done TeraTermだとこ…
for文で出来る for x in A=hoge B=piyo; do eval $x done echo A=$A echo B=$B A=hogeA B=hogeBwhile文でこう書くとアウト echo -e "A=hoge\nB=piyo" | while read x; do eval $x done A= B=なぜなら、パイプを使っているから。 サブシェルになるので変数は…
jsonの配列をシェルスクリプトとjqでループさせて取得する [ { "ip" : "192.168.10.105", "name" : "玄関" }, { "ip" : "192.168.10.102", "name" : "居間" }, { "ip" : "192.168.10.101", "name" : "トイレ" }, { "ip" : "192.168.10.100", "name" : "寝室"…
$ ssh 192.168.0.2 bash < hoge.sh
ようするにパイプなんだけど、普通と違う書き方ができる $ ls -l | grep hoge $ ls -l > >(grep hoge)上の2つはだいたい同じような意味合いを持つio redirection - bash exec sending output to a pipe, how? - Stack Overflow bash-hackers.org - このウェ…
スクリプト書いてるとき、ヘルプと実体を合わせるのが面倒だし コメントに書いたことをヘルプにも書き写すのがアホっぽくなったので できるだけひとつにまとめる実験実行するとこんな感じになる $ ./sabun.sh -h # 差分確認プログラム # 接続先の / と ロー…
ファイルを1行ずつ読んで処理をしたい。 先頭が # で始まっていたらコメント扱いしたいし、空行も読み飛ばしたい。 while read LINE; do #echo LINE=$LINE [ -z "$LINE" ] && continue [ ${LINE::1} = "#" ] && continue /usr/bin/piyopiyo $LINE done < /tm…
/usr/local/bin/hoge: 8: [: missing ] というエラーが出て、その8行目は [ -z "$ADDR"] || ADDR="HOGEHOGE" という塩梅だった。 "[" が文法じゃなくて内部コマンドだということを失念していたため、[ ] を単なる飾りとして見ていて、: missing ってなんだろ…
あの 192.168.0.1/8 みたいなおしゃれな書き方を Classless Inter-Domain Routing(CIDR:サイダー) と呼ぶらしい。 IPアドレスとサブネットマスクをまとめて表記する:Tech TIPS - @IT #!/bin/bash A=$1 C=$(( 2**(32-$A)-1 )) D=$(( 0xFFFFFFFF^$C )) E1…
echo -e 192.168.0.{1..254}\\n \ | xargs -IXXX -P30 bash -c 'ping -c1 -w1 XXX >&/dev/null; echo XXX $?' \ | sort -V > ping.txt for文で回すと1件ずつしか動かせないので、xargsで30件ずつくらい並行処理する。 並列処理すると当然結果はばらばらにな…
× cp -a hoge/* piyo/ ○ cp -a hoge/. piyo/ *を使うと一旦展開されるのがダサいし、そもそもとして隠しファイルがコピーされないのはマズい。
罫線のあるテキストをviで読んだ時に罫線が半角扱いになるためクシャっとなる問題teratermで罫線の表示 2 - 揮発性のメモ の続き Teraterm上で罫線を全角幅で表示する TERATERM.INIを編集 UnicodeToDecSpMapping=0 これにより、端末での表示上は全角になる…
make && echo OK || echo NG 逆に書くと当然アホになる
便利な shell いろいろ Bashについていくつか - 備忘録 beta bash の履歴入力で前方一致検索を有効にする bind '"\e[A": history-search-backward' bind '"\e[B": history-search-forward'コマンドを途中まで打って、カーソルキーの上下でヒストリーを検索で…
flockコマンドをflock関数みたいに使う - 揮発性のメモ リダイレクトでファイルディスクリプタを指定するとき、番号を直接指定しているのがいやだったけど、 変数名を指定することで自動で空いている番号を使用してくれることがわかった 参考:本を読む exec…
dashには配列がない。 配列宣言、初期化 $ A=() $ B=(111 "HOGE" 333) $ C[1]=jikken ()をつけて並べて書くと、添え字0から順につっこまれる 要素数 $ echo ${#B[@]} 3 $ echo ${#C[*]} 1 @でも*でもどっちでもいい。 要素の取り出し $ echo ${B[@]} 111 HOG…
端末をたくさん開いている状態で、 tailとかmakeとか長い処理してると どの端末でなにをしてるかわかんなくなるので、 今実行しているコマンドをTeraTermのウィンドウタイトルに表示したいので、表示した。 .bash_profile にこれを書き足す # window title t…
ケツ10行以内に ?> で始まっている行があれば、怪しいと判断する #!/bin/sh (tail $1 | grep -qe '^?>') && echo $1 find -name "*.php" | xargs -n1 hoge.sh
CTRL+Rで最新から過去の方向へインクリメンタルサーチ開始 (reverse-i-search)`history': history` ' で囲まれた部分が検索対象文字列 インクリメンタルサーチのモードのとき(このプロンプトがでているとき)は CTRL+Rで過去の方向、CTRL+Sで現在の方向へ検…
ignoredupsが効いてない感じがしたので、erasedupsも設定することにした # history export HISTCONTROL=ignoreboth:erasedups export HISTSIZE=2000 export HISTFILESIZE=40000 export HISTTIMEFORMAT='%m/%d %T ' historyコマンド関連のシェル変数 | Cardif…
ディレクトリを作って移動する mkcd というコマンド mkcd() { mkdir -p "$1" && cd "$_"; } エイリアスだと引数を途中に使えないので関数にする。 失敗したら途中で終わるよう && でつなげる。