補足1: 上記以降のその他のシェルの歴史 ksh: 1980年頃に開発開始し、1983年に ksh83 がリリース、ksh93 は大幅強化版 bash: 1988年1月に開発開始し、1989年6月に 0.99 がリリース pdksh:1987年から1989年頃に開発、その派生版 (mksh) を OpenBSD が採用 ash: 1989年5月にリリース、その派生版をFreeBSD、NetBSD、Debian系Linux などが採用 zsh: 1990年頃に1.0がリリース その他のシェル シェルの歴史 総まとめ(種類と系統図)と POSIX の役割 〜 シェルスクリプトの現在・過去・未来 補足2: POSIX 標準化以降 1992 年に POSIX によってシェルの仕様が標準化されました。しかし Bourne シェルは POSIX に準拠することなく 1992 年の SVR4.2 版を最
はじめに $\color{#e02020}{\huge{\bf{それは単なる「POSIX標準規格書の用語集」じゃい!}}}$ ということで、まことしやかに POSIX がテキストファイルの仕様を決めているかのような噂が流れていますが(私も言ったことがあるかも?)、POSIX に「テキストファイルは末尾に改行を書かなければならない」なんて仕様はありません。また POSIX は「テキストファイルの末尾を改行にすべし」などとも言っていません。POSIX は「3. Definitions(定義)」で 「POSIX 標準規格書の中で使用している『テキストファイル』という用語の正確な意味は・・・である」と言っているだけなんです。用語の意味を定義しただけであることも、ちゃんと POSIX に書かれています。 ❌️ POSIXはテキストファイルの末尾に改行を書かなければならないと決めた ⭕ POSIXでは
はじめに grep コマンドや sed コマンドの -e オプションや -E オプションの意味を勘違いしている例を見かけるので訂正です。 -e オプションは正規表現またはスクリプトを追加指定するためのオプションです -E オプションは拡張正規表現モードを有効にするためのオプションです -e と -E は反対の意味を持つオプションではありません。まったく異なる機能を提供しているオプションです。-e オプションは拡張正規表現でも使うことができます。 -e オプションは正規表現またはスクリプトの追加指定 まず、なぜ -e オプションというものが作られたのか? それはハイフンで始まる正規表現を指定したり、sed スクリプトを組み立てたりするためです。 grep コマンドの話 例えば grep コマンドで -a という文字列を検索したい場合はどうするでしょうか?
はじめに テスト自動化についての本を書きました。2024年7月30日に発売します。 もともと2021年3月ぐらいから書き始めて、同年12月に書き終わる予定だったのですが、伸びに伸びてこんなことになってしまいました。 幸いなことに興味を持ってくださっている人が多いようなので、ここでは書籍で書ききれなかった、執筆に至るまでの背景(あるいは、いかに自分がE2E自動テストで苦労してきたか)について書いてみたいと思います。 試行錯誤の時期 自分が初めてE2Eテスト自動化に取り組んだのは2018年ごろからで、当時は TestCafe というツールを使っていました。そのころのことは別の記事に書いてあります。 ちょっと引用してみましょう。 イケてるところ コマンド一つでマルチブラウザテスト環境が構築できる これだけで完成です。SeleniumのようにWebDriverのインストールは必要ありません。あとは
Bourne Shell はとっくにレガシーです Bourne シェルとは昔の UNIX で使われていた古いシェルの名前です。最終バージョン(SVR4.2 版)がリリースされたのは 1992 年なので 30 年も前のシェルです。現在は Bourne シェル の後継シェルが広く使われています。Linux、macOS、BSD 系 Unix(初期の BSD は除く)には Bourne シェルが搭載されたことがないため、古い UNIX を使ったことがある人以外は Bourne シェルを使ったことは無いはずです。Bourne シェルは近く終焉を迎えます。詳細は以下の記事を参照してください。 Bourneシェルの終焉まで残り1年 ~ 新しいシェルへの移行は完了していますか? Bourne シェルは Steve Bourne が開発したシェルの名前です。しばしば勘違いされていますが POSIX で標準化
やねうら王関連のドキュメントは、やねうら王のGitHubのWikiに整理して公開している。 やねうら王Wiki https://github.com/yaneurao/YaneuraOu/wiki ところが、このGitHubのWikiは、☆500以上獲得するまでGoogleにインデックスされない(Googleの検索結果に出てこない)のだ。 やねうら王のGitHubは8年目であるし、現在、GitHub Sponsors + FANBOXで1ヶ月20万円程度獲得している程度の規模感なのだが、昨日やっと☆500になったばかりである。(めでたい。やっとGoogleの検索結果に出てくる!) そんなわけで、平均的な個人のプロジェクトはGitHubで☆500なんでまず獲得できないので、(Google検索で引っかかって欲しいなら)GitHubのWikiを使うなというのが私からのアドバイスである。 その代わ
はじめに CUI は英語圏では通用しないようです。CLI という正しい用語を使いましょう。というか CUI のことしか書いていない初心者向け記事、量産させすぎ😡 ❌ CUI (キャラクターユーザーインターフェース)なんて言葉は英語にはありません 🟢 CLI (コマンドラインインターフェース)が正しい用語です 🟢 GUI (グラフィカルユーザーインターフェース)も正しい用語です なんども繰り返されている話題ですが、ふと書きたくなったので書きます。 CLI (コマンドラインインターフェース)ってなに? CLI とはその名の通り、コマンドラインを使ったインターフェースのことです。つまり一般的にはシェルを使うユーザーインターフェースです。よく見るコレ↓です。 $ ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media
小ネタです。以下の記事を読んでいて、 tar(1) はなぜオプション引数にハイフンが不要なのか? 続・tar(1) はなぜオプション引数にハイフンが不要なのか?―tarとkey argumentsの起源を更に辿る なぜ不要なのかは元記事を読んでもらうといいのだけど、ここではPlan 9ではどうなのか気になったのでtar(1)を調べてみた。ベル研UNIXの子孫なので当然だろうけど、Plan 9のマニュアルでは key の存在がそのまま残っている。 tar key [ file ... ] The key is a string that contains at most one function letter plus optional modifiers. なんだけど、そこで終わりではなく、Plan 9から派生したInfernoでは tar(1) コマンドが無くなっていて、代わりにgett
はじめに: データが途切れる問題 dd コマンドでパイプから dd bs=サイズ count=1 でデータを読み取ると途中で途切れることがあります。知っている人にとっては有名な問題だと思いますが。 $ seq -f '%0999g' 100 | dd bs=100000 count=1 | wc -l 0+1 records in 0+1 records out 49152 bytes (49 kB, 48 KiB) copied, 5.0325e-05 s, 977 MB/s 49 $ seq -f '%0999g' 100 | dd bs=100000 count=1 | wc -l 0+1 records in 0+1 records out 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000208169 s, 19.7 MB/s 4
はじめに Unix 哲学には DOTADIW: Do One Thing and Do It Well という言葉があります。日本語に訳すと「一つのことをうまくやる」となりますが、しばしば単機能のコマンドを作ることだと勘違いされています。もし勘違いしている人がいるのであれば、ぜひその人に聞いてみてください。なぜ grep コマンドはマッチした行数をカウントする機能を昔から持っているのですかと。昔からある wc コマンドがあれば grep コマンドに行数をカウントする機能をもたせる必要はないのではないかと。 -c Only a count of matching lines is printed. wc provides a count of the words, text lines, and roffcontrol lines for each argument file. 複数の機能を
以下の文書はBashを使う前提の話。 Bashにはコマンド置換(Command substitution)というのがある。$(another-command)のように、$()でコマンドを括る記法だ。これを利用すると、括弧で括られたコマンドが実行され、その標準出力が文字列として取り出され、$()全体を置き換える。シェルスクリプトでは非常によく見る技術だ。 この$()でファイルの内容を読み出すというのを最近見た。このような用法は非常によく見る。 foo-command $(cat params.txt) しかし、より良い書き方があるのでこれを提唱したい。$(< params.txt)と書くことで全く同等のことができる。しかも速いのでこちらのほうが完全に上位互換となる。 foo-command $(< params.txt) この方法はBashのドキュメントのコマンド置換のコーナーにちゃんと書か
はじめに 多分これはガセネタです。おそらく日本だけで出回っているガセネタです。インタプリタにはそのような定義はありません。インタプリタは「ソースコードを読み込んで意味を解釈して実行するプログラム」 です。「1行ずつ」は些細な間違いとして「機械語に変換する」は完全に間違いです。ある程度詳しい人にとっては常識だと思うのですが。 おそらくコンピュータは機械語しか動かせないから、インタプリタも最終的に機械語に変換しているはずだという間違った思い込みからこのガセネタは広まってしまっているのでしょう。機械語に変換するのは面倒な処理です。速くなるかもしれませんが変換処理しなくて良いのだから普通はしませんよ。 コンパイラとインタプリタの定義 コンパイラとは コンパイラとは、ソースコードを元に実行可能なプログラムを生成するためのプログラムです。ユーザーは(ソースコードではなく)別に生成されたプログラムを実行
Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well—usually programs they wrote themselves—and never study the great programs of history. As a result, they repeat one another's mistakes rather than building on one another's successes.
JavaScriptランタイムのBunは、新機能としてシェルスクリプトをJavaScriptもしくはTypeScriptで記述し、特定のOSに依存せずに実行できる「Bun Shell」を発表しました。 シェルスクリプトは特定のシェルに依存するもの LinuxやmacOS、WindowsなどのOSは一般に、「シェル」(Shell)と呼ばれる機能を備えています。 シェルはコマンドラインインターフェイスなどのユーザーとの対話機能を備えており、例えばLinuxのコマンドラインで「ls」コマンドを打ち込むとファイルの一覧が返ってくるという動作はシェルが提供しています。 そしてシェルでは一般に、こうしたコマンドを複数つなげた一連の動作をスクリプトとして定義し実行できる「シェルスクリプト」が利用可能です。例えば、次のシェルスクリプトは、「ls」コマンドによるファイルの一覧をファイル「list.txt」に
シェルスクリプトが速くなる! forkしない新しいコマンド置換がやってくる!(次期bash/zshの新機能)ShellScriptBashZshkshmksh はじめに シェルスクリプトを遅くする大きな原因は fork と exec です。この二つは OS のインターフェースである fork() 関数と exec() 関数のことで、シェルスクリプトからは、外部コマンドやバックグラウンドプロセスの実行、明示的なサブシェル (...)やコマンド置換 ret=$(...)、パイプの使用などで呼び出されます。 シェル関数はシェルの中で実行される関数であるため、単純にシェル関数を呼び出す場合には fork も exec も行われません。しかしシェル関数の出力を変数に代入しようとコマンド置換(var=$(func))を使うと、exec は行われませんが fork は行われてしまいます。その事に気づかず
シェルスクリプトの関数で「戻り値」を返す方法、全部まとめ(bash/zshの新機能 関数置換・値置換の使用例)ShellScriptBashZshkshmksh はじめに シェルスクリプトのシェル関数の return コマンドは他の言語のような戻り値を返すものではありません。return コマンドで返すものは終了ステータス、つまり 0 から 255 までの数値です。しかし現実には終了ステータス以外の値を返したいというのはよくあります。この記事ではシェル関数から「他の言語でいう戻り値を返す」に相当する方法をすべてまとめました。または次期 bash 5.3/zsh 5.10 で追加される予定の「関数置換 (funsub)」と「値置換 (valsub)」の機能の紹介です。 この記事では現時点で開発中の bash 5.3 と zsh 5.10 に追加される予定の「関数置換」と「値置換」の話を扱って
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く