2020/06/27 第48回シェル芸勉強会LT資料 https://www.youtube.com/watch?v=PIqx9fCSbaU&t=609s
開発者にとってシェルが必要不可欠なものであることは論を俟ちませんが、当たり前の存在すぎてこれがどのように実現されているのかを知る機会はあまりないと思います。本トークでは、シェルがどのように実現されているのかを、実際にシェルを実装する過程を通じてお話しします。 ※ もともとのトークのタイトルは「入門 シェル」でしたが,わかりやすさのため「入門 シェル実装」にタイトルを変更しています.Read less
Bash は言わずと知れた歴史あるコマンド言語です。テキストにコマンドの羅列を記述するだけで、手軽にシェルスクリプトとして実行することができます。 シェルスクリプトの実体はシェルコマンドの羅列に過ぎませんが、手続き型プログラミング言語にあるような制御構文も備えています。変数や条件分岐、ループ、関数などです。これらを使えばシェルスクリプトでプログラミングも可能です。 もちろん、現代の一般的なプログラミング言語と比べると機能は限られます。他の言語には見られないシェルスクリプト特有の癖や記法も数多くあり、最近の言語に慣れている人ほど、つまずくポイントが多いです。 しかし、シェルスクリプトだからこその良さもあります。Bash は現在でも多くの OS で標準シェルとして採用されており、普段使っているシェルコマンドを書くだけで動かせる手軽さは何者にも代えがたいです。一度身につけておくと長く使えるお得な
ある日zshの履歴が消えた悲しみからいくつか課題感を持っていた。 巨大な1ファイルにどんどん書いていくので、壊れたときの影響が大きい 追記方式なので、複数の端末で共有するためGitやDropboxなどに入れるとコンフリクトしやすい 履歴から取り出すときにどのディレクトリで実行したコマンドなのかわからない シェル履歴をファイルに書いて終わりという暮らしは数十年変わっていない。 履歴はクラウドサーバーに保存して、補完したいときにAPI経由で問い合わせるというアーキテクチャが良いと思ったので、作ってみた。 github.com コマンドの実行時 zshのフックを使って、コマンドの実行時に、実行したコマンドと$pwdをAPIにPOSTする Cloud Functionsが立っていて、送られたコマンドをCloud Datastoreに保存する Cloud FunctionsはGoogle製のAWS
「新しいシェルプログラミングの教科書」というシェルスクリプトの入門書を執筆しました。 2017年11月21日発売です。 新しいシェルプログラミングの教科書 作者: 三宅英明出版社/メーカー: SBクリエイティブ発売日: 2017/11/21メディア: 単行本この商品を含むブログを見る 目次 シェルってなんだろう シェルスクリプトとは何か シェルスクリプトの基本 変数 クォーティング 制御構造 リダイレクトとパイプ 関数 組み込みコマンド 正規表現と文字列 シェルスクリプトの実行方法 シェルスクリプトのサンプルで学ぼう シェルスクリプトの実用例 テストとデバッグ 読みやすいシェルスクリプト 内容 bashのシェルスクリプトを書く方法について解説した本です。 変数、制御構造(if文など)、関数などbashの基本的な文法から始まって、実際に役に立つシェルスクリプトを作成して、そのテストとデバッグ
最強のヒストリ補完を求めて シェルヒストリに不満を持っていたので自作しました。今の自分にとっては必要な機能を盛り込んでいて便利に使えていますが、誰かにとっては、もしくは数カ月後の自分にとってはぜんぜん最強じゃないかもしれないです。 以前このようなエントリを書きました。 www.tellme.tokyo このころから (いやもっと前から) シェルのヒストリ補完に不満を持っていました。 単純にデフォルトの C-r だと目的のものを探しづらい 例えばコマンド名の一部だけだとノイズが多すぎる けどディレクトリは覚えているからそれでもフィルタしたい、とか 他にも色々あって (その理由について先のエントリを見てもらうとして) zsh-history というツールを書きました。 GitHub - b4b4r07/zsh-history: A plugin for zsh history extended
並列実行というと xargs や GNU parallel を思い出しますが、「エラーのあった実行のログを最後にまとめて出力する」ということを考えるとどちらも不十分でした。(できるのであれば教えてほしい) しかし、シェルには wait などの素敵な並列実行の仕組みが用意されているので、頑張って自分で実装してみました。 #!/bin/bash # # parallel.sh # usage: echo 1 2 3 4 5 | parallel.sh my_script.sh # 標準入力から受け取ったリストを引数として、引数で与えられたコマンドを実行する # 成功したコマンドの結果を先に出力してから失敗したコマンドの結果を最後にまとめて出力する list=$(cat) tmpdir=$(mktemp -d) for i in $list do ($@ $i > $tmpdir/$i.log
現在の shell(以下、current shell) を確認する方法として真っ先に思い浮かぶのは以下だと思います。 $ echo $SHELL /bin/bash ただ、これは不正解で、$SHELL はあくまでも login shell ですので、 login shell と current shell が違う場合は正しい値を返してくれません。 私の場合ですと、ローカル環境で常時利用しているのは zsh ですが、 login shell は bash です(zsh を login shell にすると重いと教えていただいたことがあるので)。 このようなケースでも正しい値を返す方法が以下です。 $ echo $0 -zsh shell 上では $0 に current shell が格納されています。 これで解決すれば良いのですが、shellscript 内で確認しようと思うと話しは変わっ
naoya_itoの火を噴いたシェルtips - Togetter これを読んでふと書きたくなったので。ちなみに僕はbash使っています。 CTRLを使った便利系 まず、UNIXな操作あたり。 キーバインド 意味 CTRL + s キー入力を受け付けなくする 画面出力抑える CTRL + q 上記解除 CTRL + z バックグラウンドに. fgで戻る CTRL + l 画面をクリア。clearと同等 CTRL + c 現在の処理を停止 CTRL + d exitと同等 CTRL + r historyからコマンド検索 emacsっぽいやつ どっちかというとキー操作に近い。基本はemacs。metaは僕はoptionに割り当ててる。とりあえず触りたい人はESCでOK。 キーバインド 意味 CTRL + a 行頭 CTRL + e 行末 CTRL + f → CTRL + b ← CTRL
プロセス置き換えとか、名前付きパイプとか、とても便利な機能なのだけど、その仕組みはどうなっているのだろう?断片的な知識ばかりでは、その核心にはなかなか辿り着けない。サンプルコードの真似はできるけど、それ以上の発想はできない...。もっと根本的なところからちゃんと理解しておかないと、いつまでたってもコマンドの使い方の本質が理解できないと感じた。プロセスとは何か?パイプとは何か?リダイレクションとは何か?ファイルディスクリプタとは何か?可能な限りその本質を探ってみようと思う。 UNIXのプロセス UNIXでは、複数のユーザーがログインした状態で、同時に複数の処理を依頼される状況が多々ある。 ところが、どんなに高性能なCPUであっても、ある瞬間に処理できるのはたった1つの処理だけである。 そんな時OSは、それぞれの処理に必要なメモリ領域を割り当てて、CPUをタイミングよく切り替えながら同時並行的
最近、今更ながらにawsで遊んでいる (っ´∀`)っ ゃーですこんにちは。Amazon EC2のAPIを手持ちのノートPCにインストールして遊んでいます。こちらのインストール方法については別途投稿しますが、パッケージのアップデートを監視するほうに夢中になって、EC2-API-TOOLSの更新通知スクリプトなんぞ書いてしまいました。 特徴ですが、変数「FILENAME」にファイル名を、変数「URI」にダウンロード元URI(監視対象)を、変数「MAILTO」にメール通知先を指定してあげるだけです。2回以上このスクリプトをキックすると、最大2世代のファイルを持つことになり、md5値のdiffが異なっていたらメール通知するというものです。ソースは以下の通りです。 #!/bin/bash LANG=C FILENAME=ec2-api-tools.zip # 監視対象ファイル名(ローカル) URI=
プログラムの種類によっては、そのまま実行できるものと、実行できるようにするために「ビルド」が必要なものとがあります。Cなどのコンパイルが必要な言語で書かれたプログラムは当然ビルドが必要ですし、コンパイルが不要な言語であっても、インストーラパッケージを作るというビルド作業が必要な場合はあります。 ビルド作業の自動化のためのツールとしてmakeなどがありますが、そこまで本格的な事をやる必要がない場合は、シェルスクリプトで「ビルドスクリプト」を作るのが手軽でおすすめです。この記事では、そのような場合に役立つシェルスクリプトのテクニックを4つご紹介します。 エラーの気付きやすさとデバッグのしやすさを高める メッセージに色を付ける シェル関数をライブラリにする 一時的に作業ディレクトリの中に入る エラーの気付きやすさとデバッグのしやすさを高める はじめに紹介するテクニックは問題が発生した時に気づきや
みなさん、shebang書いてますか! Shebangというのは、スクリプトの最初の一行目に書く、「#!/bin/sh」とか「#!/usr/bin/perl」とかそういうあれです。詳しくはWikipediaさん(シバン (Unix))に聞いてくださいまし。 Twitter見てると、「そもそもこれにshebangなんて名前がついてるの知らなかったよ」という発言も見る不憫な子ではあるのですが、そこに何が書いてあるかで実は動作が違うよってのが今日の本題です。それで、はまっていたのを最近見て、まああまりここで引っかかる人はいないと思いつつ、この点を書いた情報を見ないのでまとめてみました。*1 今日取り上げるのは、bashがデフォルト設定になっているLinuxでの「#!/bin/sh」と「#!/bin/bash」のお話。確認はCentOS5, 6で行なっています。 さて、上記の環境の場合、「/bin
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く