Diary

Diary

日々学んだことをアウトプットする場として初めてみました

Shell

ターミナルで RDB の JOIN

join というコマンドがすごい便利だったので共有です。 概要 manual page にもあるように、RDB の join と同じことができます。 $ man join JOIN(1) General Commands Manual JOIN(1) NAME join – relational database operator RDB に多少触れたことがある…

grep で特定のフォルダを無視して再帰検索する

プログラミングにおいてコード内の特定の文字列を探すことは多いですが、特に大規模なプロジェクトでは、この作業が一筋縄ではいかないことがあります。 node_modules や dist といったディレクトリを含めたくない場合がその典型例です。 今回は, grep のオ…

正規表現でキャメルケースをスネークケースにする

ユースケース HogeFuga → hogeFuga みたいな『先頭のみの大文字小文字を変換する』ということがしたいケースがありました。 同じ要領で『キャメルケース → スネークケース(逆も)』ができたのでその紹介です。 (注: 以下コマンドの結果はすべて GNU sed に…

systemd で定期実行する

『systemd で定期実行をする』というよくある内容ですが、設定できたつもりになってた自分自身の反省を兼ねてメモしておきます。 (細かい設定方法については説明しません。) systemd などのタスク系に関しては、うまく動いてるかの確認がより大事になって…

terminal で alias の定義場所を探す

ターミナルで作業をする時、alias 等を使い極力文字数を減らして打ち間違いを防ぐ事が多いかと思います。 しかし oh-my-zsh などのツールによって設定された値など、たまに「あれ?これどこで定義された alias だっけ?」ってなる事があります。 そんな時は…

bash でシェルオプションを確認・変更する

『現在のシェルセッションにおける変数と関数の一覧を表示』するには set コマンドに何もつけずに叩きます。 # 240 行もあり。 $ set | wc -l 242 # PATH だけを出力。 set | grep PATH シェルオプションの現在の状態を表示するには o オプションをつけて叩…

bash で標準エラー出力のリダイレクト・パイプラインを扱う

今更感ですが、標準エラー出力をリダイレクトやパイプに渡す方法をメモしておきます。 [目次] 標準エラー出力とは 標準エラー出力を特定のファイルにリダイレクトさせる 標準エラー出力を切り捨てる 標準エラー出力をパイプに渡す

bash のみで progress bar をつくる

特に bash のみで作る理由はないですが、こんなことも出来るんだという紹介です。 [目次] echo のオプション r c progress bar 実装

zsh: history から失敗したコマンドを削除する

課題 terminal 上のコマンドは実行履歴が残っており、それを shell の history と呼ぶのですが、そんな history は情報の山となってます。 自分は主に『過去のコマンドを history から呼び出し fzf で曖昧に検索する』みたいな用途で使っているのですが、そ…

どうしてもヌルバイトを使用したい

どうしてもヌルバイト (NUL) を出力・使用したいことがあったで、その時の出し方についてメモしておきます。 [目次] ヌルバイトとは ターミナルからの出力 どんな問題が? db: postgresql コマンドの結果が期待値とならない シェル設定によってはセパレータ…

パイプの中身をシステムコールレベルで理解・実装する

パイプの中身をシステムコールレベルで理解・実装する 『ふつうのLinuxプログラミング』を読んで勉強させてもらったメモになります。 コードは載ってなかったため自分で実装してみました。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べる…

シェルのパイプ連結をシステムコールから理解する

シェルの上でよく遊ぶ方であれば、パイプ | は非常にお世話になっているかと思います。 今回はそんなパイプについて、どのようなシステムコールが呼ばれているかを追うことで理解を深めてみました。 [目次] - まとめ - 環境 - pipe status の復習 - システム…

【自動化の敵】対話型 CLI を expect で突破する

突然ですがみなさん、自動化しているでしょうか? 自動化するときに悩むのが、対話型 CLI に代表されるインタラクティブなツールの存在だと思います。 個人的には、自動化もできないし打ち間違いも発生するしで、対話型 CLI はエンジニアの使うツールとして…

ubuntu で Package graphviz is not available, but is referred to by another package.

apt update しても解決しない場合、デフォルトのリポジトリに graphviz が存在しないことが考えられます。 ubuntu のリポジトリとしては main, restricted, universe, multiverse がありますが、ここではなんとなく universe を追加してみます。 universe は…

Makefile で if 文を使って、変数の有無で処理を切り替える

変数の有無で処理を変える 以下のように設定します。 if-test: ## ifeq ($(name),) ## 引数がない時 @echo Hello 名無さん else ## 引数がある時 @echo Hello $(name) endif 引数がある時とない時で処理が変わります。 # 引数がない時 $ make if-test Hello …

bash [[ 内での <,> は文字列比較になるよ

bash で変数の評価を行う際に [[ をよく使うんですが、その中の <, > の意味を間違っていたがために、無駄に時間を使ってしまう事件がありました。 (未来の自分を含めた)皆さんには変なところで躓いて欲しくないため、こちらにメモしておきます。 [目次] …

git log を使って 1 日分のコード差分行数を計算

git log を使って、特定のユーザーが何行進捗を出したかを確認する例のメモです。 特に、initial commit などのコミットメッセージに代表されるプロジェクト(フレームワーク)の初期ファイルを、コミットメッセージから無視するようにしました。 特定のユー…

ShellCheck から学ぶ良いスクリプトの書き方 〜SC2086(ダブルクォート)編〜

とりあえずは変数はダブルクォーテーションで囲もうってことなんですが、囲まないとどうなるか少し調べてみました。 [目次] Double quote to prevent globbing and word splitting. globbing word splitting おまけ おわりに 今回は簡単な部類である SC2086 …

bash スクリプト初心者が知っておきたいことまとめ

いまだに自分も初心者ですが、 初心者から見て初めに知っておきたかったこと、思いがけず詰まったことをメモしておきたいと思います。 誰か(来年のぼく)の参考になればと思います。 [目次] 環境 結論 スタイル編 変数 [ はコマンドです! エラーが起きても…

bash で `!` は特殊な意味を持つっていう話

bash で ! は特殊な意味を持つので注意しよう、という話をしたいと思います。 私は語尾に ! をつける癖があるのですが、そのせいで予想と異なる挙動をすることがありました。 [目次] 時間がないひとまとめ 環境 なにが起こったか とりあえずはマニュアル ! !…

bash リダイレクトはファイルを初期化します

これはかつての自分が本当に体験したことなのですが、『ファイルの情報源』と『リダイレクトの出力先』を同一にしてしまったために起きた怖い怖い現象の話をしたいと思います。 [目次] 環境 時間ない人向けまとめ 自己リダイレクト system call をみてみる …

mac と Linux の違い [sed command]

手元の mac で動作確認をし、リモートマシン(GitHub Actions)で実行したところ、上手くいかないことがありました。 過去にも同じこと調べたな〜と思ったので、メモしておきます。 やりたいこと ファイルの中の <link href="https://your.domain/style.css?20220720-1408"> という文字列から、style.css?20220720-1408</link>…

IFS を変えてセミコロンで文字列を分割する

IFS とは IFS とは Internal Filed Separator の略語であり、シェルの環境変数で設定されています。 現在の値確認 では実際に、現在設定されている IFS を確認してみます。 # ubuntu: # bash: version 5.0.17(1)-release (aarch64-unknown-linux-gnu) $ echo…

Bash スクリプトでよく使うテクニックまとめ

コマンド単位の使い方ではなく、作業効率化のためのスクリプトを書く際などに使えるテクニックをまとめてみました。 便利なものがあれば随時追加していきます。 [目次] エラー対策 set -e 指定時にエラーでも止めないようにする ファイル内容のコメント 複数…