koichi_nakashimaのブックマーク (313)

  • インタプリタは「コードを1行ずつ機械語に変換する」はガセネタ - Qiita

    はじめに 多分これはガセネタです。おそらく日だけで出回っているガセネタです。インタプリタにはそのような定義はありません。インタプリタは「ソースコードを読み込んで意味を解釈して実行するプログラム」 です。「1行ずつ」は些細な間違いとして「機械語に変換する」は完全に間違いです。ある程度詳しい人にとっては常識だと思うのですが。 おそらくコンピュータは機械語しか動かせないから、インタプリタも最終的に機械語に変換しているはずだという間違った思い込みからこのガセネタは広まってしまっているのでしょう。機械語に変換するのは面倒な処理です。速くなるかもしれませんが変換処理しなくて良いのだから普通はしませんよ。 コンパイラとインタプリタの定義 コンパイラとは コンパイラとは、ソースコードを元に実行可能なプログラムを生成するためのプログラムです。ユーザーは(ソースコードではなく)別に生成されたプログラムを実行

    インタプリタは「コードを1行ずつ機械語に変換する」はガセネタ - Qiita
  • The Architecture of Open Source Applications

    If you enjoy these books, you may also enjoy Software Design by Example in Python, Software Design by Example in JavaScript, Research Software Engineering with Python, JavaScript for Data Science, and Teaching Tech Together. 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

  • The Architecture of Open Source Applications 日本語訳

  • シェルスクリプトをJavaScript/TypeScriptで記述、どのOSでも実行できる「Bun Shell」、JavaScriptランタイムのBunが発表

    JavaScriptランタイムのBunは、新機能としてシェルスクリプトをJavaScriptもしくはTypeScriptで記述し、特定のOSに依存せずに実行できる「Bun Shell」を発表しました。 シェルスクリプトは特定のシェルに依存するもの LinuxmacOSWindowsなどのOSは一般に、「シェル」(Shell)と呼ばれる機能を備えています。 シェルはコマンドラインインターフェイスなどのユーザーとの対話機能を備えており、例えばLinuxのコマンドラインで「ls」コマンドを打ち込むとファイルの一覧が返ってくるという動作はシェルが提供しています。 そしてシェルでは一般に、こうしたコマンドを複数つなげた一連の動作をスクリプトとして定義し実行できる「シェルスクリプト」が利用可能です。例えば、次のシェルスクリプトは、「ls」コマンドによるファイルの一覧をファイル「list.txt」に

    シェルスクリプトをJavaScript/TypeScriptで記述、どのOSでも実行できる「Bun Shell」、JavaScriptランタイムのBunが発表
    koichi_nakashima
    koichi_nakashima 2024/01/30
    シェルやコマンドはOSに依存する。ならばOSに依存しないbashやGNU Coreutils等をインストールすれば解決する。JavaScriptランタイムをインストールするのと何も変わらない。その発想がいつまでも生まれない事が興味深い。
  • シェルスクリプトが速くなる! forkしない新しいコマンド置換がやってくる!(次期bash/zshの新機能) - Qiita

    シェルスクリプトが速くなる! forkしない新しいコマンド置換がやってくる!(次期bash/zshの新機能)ShellScriptBashZshkshmksh はじめに シェルスクリプトを遅くする大きな原因は fork と exec です。この二つは OS のインターフェースである fork() 関数と exec() 関数のことで、シェルスクリプトからは、外部コマンドやバックグラウンドプロセスの実行、明示的なサブシェル (...)やコマンド置換 ret=$(...)、パイプの使用などで呼び出されます。 シェル関数はシェルの中で実行される関数であるため、単純にシェル関数を呼び出す場合には fork も exec も行われません。しかしシェル関数の出力を変数に代入しようとコマンド置換(var=$(func))を使うと、exec は行われませんが fork は行われてしまいます。その事に気づかず

    シェルスクリプトが速くなる! forkしない新しいコマンド置換がやってくる!(次期bash/zshの新機能) - Qiita
  • シェルスクリプトの関数で「戻り値」を返す方法、全部まとめ(bash/zshの新機能 関数置換・値置換の使用例) - Qiita

    シェルスクリプトの関数で「戻り値」を返す方法、全部まとめ(bash/zshの新機能 関数置換・値置換の使用例)ShellScriptBashZshkshmksh はじめに シェルスクリプトのシェル関数の return コマンドは他の言語のような戻り値を返すものではありません。return コマンドで返すものは終了ステータス、つまり 0 から 255 までの数値です。しかし現実には終了ステータス以外の値を返したいというのはよくあります。この記事ではシェル関数から「他の言語でいう戻り値を返す」に相当する方法をすべてまとめました。または次期 bash 5.3/zsh 5.10 で追加される予定の「関数置換 (funsub)」と「値置換 (valsub)」の機能の紹介です。 この記事では現時点で開発中の bash 5.3 と zsh 5.10 に追加される予定の「関数置換」と「値置換」の話を扱って

    シェルスクリプトの関数で「戻り値」を返す方法、全部まとめ(bash/zshの新機能 関数置換・値置換の使用例) - Qiita
  • シェルで行番号を付けるなら nl ではなく cat -n を使おう! - Qiita

    はじめに シェルまたはシェルスクリプトである出力のすべての行に行番号を付けたいと思った時、どのコマンドを使いますか? その候補は複数ありますが、その一つに nl コマンドを使う方法があります。しかし nl コマンドを使って行番号を付けるのは良くない考えです。なぜならおそらくあなたが期待したとおりに行番号が付けられない場合があるからです。この記事では nl コマンドとは来どのようなコマンドであるかを解説します。 なぜnlコマンドを使って行番号を付けてはいけないのか? 論より証拠というわけで、nl コマンドを使うとどのように行番号をつくのかを示しましょう。その答えなら知ってるよ、デフォルトでは空行に行番号が付かないんでしょ? という人のために -ba オプションを指定して空行にも行番号を付けるようにします。 まず次のようなファイル (file.txt) を用意し・・・

    シェルで行番号を付けるなら nl ではなく cat -n を使おう! - Qiita
  • 【POSIX準拠】標準化された readlink・realpath コマンドの使い分けと歴史 - Qiita

    はじめに readlink コマンドと realpath コマンドは、どちらもシンボリックリンクを解決し、指定したパスの実体がある場所を探すコマンドです。後ほど解説しますが、シェルスクリプトを書くときに非常に重要なコマンドです。 readlink コマンドと realpath コマンドは多くの環境で使えるようになり、POSIX.1-202x (Issue 8) で標準化されました。一般的に標準化は実装された後に行われるため、使ったことがある人は多いでしょう。ほとんどの環境ですでに実装ずみであるため気兼ねなく使えるようになりました。もし古い使えない環境にも対応したい場合には、私が readlink -f と互換性がある readlinkf 関数を作っているので環境が対応するまでそれを使用して時間稼ぎができます。 readlink コマンドと realpath コマンドを使ったことがある人は、

    【POSIX準拠】標準化された readlink・realpath コマンドの使い分けと歴史 - Qiita
  • xargs 完全理解マニュアル - xargs は拡張引数 (extended arguments) の略って知っていますか? - Qiita

    xargs 完全理解マニュアル - xargs は拡張引数 (extended arguments) の略って知っていますか?ShellScriptUNIXシェル芸POSIXUnix哲学 はじめに xargs コマンドは「なにか凄そうだけどよく分からないコマンド」としてよく知られています。使う人は使うけど何をやっているのか全くわからないコマンドです。また、やっていることがわかっても実際に使ってみると、空白やクォーテーション文字でエラーになってしまう使い方がとても難しいコマンドです。この記事はそういうよくわからない xargs はどういうコマンドなのか解説します。この記事を読むと xargs を「完全に理解した」と言えるようになるでしょう。 xargs コマンドが難しい理由は、xargs 自体の設計や実装の問題で古い時代の制限が多いからです。仕様が意味不明で一貫性がなくで他のコマンドと正しく

    xargs 完全理解マニュアル - xargs は拡張引数 (extended arguments) の略って知っていますか? - Qiita
  • Bourneシェルの終焉まで残り1年 ~ 新しいシェルへの移行は完了していますか? - Qiita

    はじめに 30年以上もの長い間 UNIX を支えてきた Bourne シェルも UNIX のサポート終了とともに消え去ろうとしています。みなさん、他のシェルへの移行はお済みでしょうか? 残り一年、まだ移行が済んでいないという人のために、移行のための簡単なガイドラインと各シェルの特徴をまとめました。 sh は昔は Bourne シェルのことでしたがそれも過去の話です。今どき「Bourne シェル」を解説している記事や sh のことを Bourne シェルと呼んでいる記事は情報が古い(大学関係に多い)、または古い情報を元にして書かれたか、シェルのことを正しく理解してない不正確な記事なので参考になりません。分かりやすい基準ですね。 関連記事 シェルとUNIXコマンドの未来 ~ これからの10年で起きるシェルスクリプトの変化 残り1年というのはどういうこと? Bourne シェルは POSIX に

    Bourneシェルの終焉まで残り1年 ~ 新しいシェルへの移行は完了していますか? - Qiita
  • トーバルズ氏、Linux開発の現状や生成AIについて語る

    Linuxの生みの親であるLinus Torvalds氏は、ここしばらく表舞台に顔を見せていなかった。しかし、Linux Foundationのが開催したOpen Source Summit Japanでは、久々に多くの聴衆がいる場に姿を見せ、同氏の友人であり、Verizonのオープンソース責任者を務めるDirk Hohndel氏を相手に対談を行い、Linuxの現状について語った。 2人はまず、次のLinuxカーネルリリースである「Linux 6.7」について話した。Torvalds氏は、日に向かう直前に、Linux 6.7の4番目のリリース候補版をリリースしたところだった。順調に行けば、クリスマス頃にLinuxカーネルの次のバージョンがリリースされても不思議ではないペースだ。 このようなスケジュールになったのは、Torvalds氏が「マージウィンドウをクリスマスの時期に持ってきて、クリ

    トーバルズ氏、Linux開発の現状や生成AIについて語る
    koichi_nakashima
    koichi_nakashima 2023/12/13
    『私は普段、AIは強力なオートコレクト機能だと言っている。』と言ったのはDirk Hohndel氏じゃんか・・・
  • 【永久保存版】シェルスクリプト完全攻略ガイド - Qiita

    弊社Nucoでは、他にも様々なお役立ち記事を公開しています。よかったら、Organizationのページも覗いてみてください。 また、Nucoでは一緒に働く仲間も募集しています!興味をお持ちいただける方は、こちらまで。 シェルスクリプトの世界へようこそ! シェルスクリプトって何? シェルスクリプトは普段 Bash などのシェルで実行しているコマンドを並べて、まとめて実行できるようにしたものです。ファイルのバックアップ、ログファイルの解析、システムのセットアップなど、ターミナルで行っていた一連の作業をまとめてシェルスクリプトに記述することで、シェルスクリプトを実行するだけで自動的に一連の作業を終わらせることができるようになります。また、シェルスクリプトはファイルに保存することになるため、再利用するのも簡単になります。 シェルスクリプトで使うコマンドの多くは UNIX コマンドになると思います

    【永久保存版】シェルスクリプト完全攻略ガイド - Qiita
    koichi_nakashima
    koichi_nakashima 2023/12/11
    細かいツッコミはできないことはないが(→細かいツッコミしといた)、平均的なシェルスクリプト記事や書籍に比べて十分良い記事
  • 良いシェルスクリプトのためのkillとtrapの基本 ~ シグナル番号は使わない、シグナル名を使う - Qiita

    はじめに kill コマンドと trap コマンドはシェルでシグナルの送信と受信を行うためのコマンドです。このコマンドは意外と適切ではない使われ方をよく見かけます。この記事では kill と trap の基礎知識を解説します。 POSIX準拠のkillコマンドの構文 POSIX で標準化されている kill コマンドの使い方は次のとおりです。POSIX で標準化されているというのは移植性が高い書き方ということを意味しています。シグナル名の指定には -s オプションが必要です。そして signal_name であって signal_number でないことに注意してください。POSIX シェルの世界にシグナル番号という概念はありません。シグナル番号を指定した書き方は避ける方をおすすめします。

    良いシェルスクリプトのためのkillとtrapの基本 ~ シグナル番号は使わない、シグナル名を使う - Qiita
  • 最終行に改行がないテキストファイルをシェルスクリプトで上手く扱う方法 - Qiita

    はじめに 一般的にファイルの最終行に改行がないデータを扱うのは良い考えとは言えません(よくない理由は別記事で書きます)。しかしそれでも扱いたい場合もあります。この記事ではその方法をまとめました。 この記事は シェルスクリプト&PowerShell Advent Calendar 2023 2日目の記事です。 1. read コマンドで改行がないデータを扱う この read コマンドを使った方法は POSIX で標準化された範囲のシェルの機能とコマンドの中では 最終行の末尾に改行がある場合とない場合を正しく区別できるという点で (おそらく)最も自然な形でシェルスクリプトで最終行に改行がないデータを扱う方法です。 改行がないデータとして扱う ときどき read コマンドは終端に改行が無いデータを読み込めないと言われますが、実はそれは正しくありません。データは読み込んでいるのですが最終行の改行が

    最終行に改行がないテキストファイルをシェルスクリプトで上手く扱う方法 - Qiita
  • sort -u と sort | uniq は同じじゃないよ ~ 文字の順番とロケールとPOSIXと現実の実装のめんどくさい話 - Qiita

    sort -u と sort | uniq は同じじゃないよ ~ 文字の順番とロケールとPOSIXと現実の実装のめんどくさい話ShellScriptBashLinuxUNIXPOSIX はじめに sort コマンドの -u オプションは重複行を取り除くオプションです。-u は 1979 年の Vesion 7 Unix のときからある古いオプションで、シェルスクリプトに詳しいと自負している人でこのオプションを知らなければモグリでしょう。uniq コマンドは重複行を取り除くコマンドです。「現在のすべての問題が解決された場合」は sort -u と sort | uniq はほぼ同じになるのですが、実際には異なる結果を返すことがあります。この記事ではその問題について解説します。 前提知識: sort-u と uniq の正しい理解 この記事の話とは少し異なりますが前提知識として sort コマ

    sort -u と sort | uniq は同じじゃないよ ~ 文字の順番とロケールとPOSIXと現実の実装のめんどくさい話 - Qiita
  • findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識 - Qiita

    はじめに find コマンドの使い方は、ざっくり調べただけではよくわからんとなりますが、見逃しがちなルールを知れば簡単に理解できます。find コマンドに限りませんが使い方を調べるのが面倒だからと曖昧な理解で使うと逆にもっと分からなくなって時間がかかります。急がば回れ、理解して正しく使ったほうがシンプルで楽で簡単です。この記事では find コマンドの使い方を理解するために必要なルールと使い方の実践的な知識をまとめました。 Q&A(?): -type や -perm の説明はしないの? ⇒ それらはドキュメントを読むか検索すればすぐにわかることで難しいポイントではありません。重要なのは基のルールを理解することです。 関連記事 POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき! 移植性の話はこちら ⇒ findコマンドのオ

    findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識 - Qiita
    koichi_nakashima
    koichi_nakashima 2023/10/23
    下の方に「引数展開は展開数が多いと失敗するのでNG」と言ってる人がいるが間違いなので注意。展開数が多い時にARG_MAXを超えないサイズに調整されることはPOSIXでも規定されている動作。記事にもその話を追記済み。
  • link/unlinkはハードリンクの作成・削除コマンド。シンボリックリンク用ではないしファイルも削除する管理者用コマンド。 - Qiita

    link/unlinkはハードリンクの作成・削除コマンド。シンボリックリンク用ではないしファイルも削除する管理者用コマンド。ShellScriptLinuxシンボリックリンクシェル芸UNIXコマンド はじめに unlink コマンドはハードリンクを削除するコマンドです。コマンド名に link と入っているから勘違いしている人がいるようですがシンボリックリンクを削除するために作られたコマンドではありません。unlink コマンドの反対は link コマンドです。 link コマンドはハードリンクを作成します。その反対なので unlink コマンドはハードリンクを削除するコマンドと言って良いでしょう。リンクを削除してどこからもリンクされなくなったファイルは消えるのでunlink コマンドはファイルも削除します。シンボリックリンクファイルもファイルなので削除されます。 link/unlink は

    link/unlinkはハードリンクの作成・削除コマンド。シンボリックリンク用ではないしファイルも削除する管理者用コマンド。 - Qiita
  • squoze.net

  • 【衝撃の罠】bashスクリプトのパフォーマンス測定は、対話シェルでやっても無意味だ! - Qiita

    理由 びっくりした。対話シェルで実行してパフォーマンス測定すると何故かめちゃくちゃ時間がかかる。これではデータにならない。 追記 よくよく考えたらパフォーマンス測定だけの問題ではなく実際に遅くなるのだから、対話シェルから「このようなコード」を実行してはいけないということを意味しています。「このようなコード」がどのようなコードなのか発生条件はまだ特定できていませんが、少なくともシェルスクリプトにしていれば問題は発生しません。また bash 以外のシェルでも問題は発生しません。 検証結果が気になった方は、ぜひ試してみて、この話を広めてください。 証拠 実行環境: Ubuntu 22.04.3 LTS、bash 5.1.16

    【衝撃の罠】bashスクリプトのパフォーマンス測定は、対話シェルでやっても無意味だ! - Qiita
    koichi_nakashima
    koichi_nakashima 2023/09/30
    .bash_profileと.bashrcを読み込まない状態でも確認していることを書いてなかったので追記。気になった方はお試しあれ。
  • 問 awk をワンライナーで書く時のアクション区切りの「;」の数は0個? 1個? 2個? + こぼれ話 - Qiita

    問題 awk で複数のアクションをワンライナーで書いた時、区切りの「;」の数は、0個、1個、2個のうちどれが最も適切でしょうか? 以下の中から適切な回答(複数可)を選び、その理由も答えてください。 # A. セミコロンは不要である echo foo | awk '{print} {print}' # B. セミコロンは一つ必要である echo foo | awk '{print} ; {print}' # C. セミコロンは二つ必要である echo foo | awk '{print} ;; {print}' この記事は上記の問題の回答、およびその回答にまつわる Brian Kernighan と One True Awk、GNU awk との互換性、POSIX awk の標準規格、に関するこぼれ話を紹介する記事です。 . . . ブコメにちゃんと文章読んでるんだろうか?と疑問になるレスが

    問 awk をワンライナーで書く時のアクション区切りの「;」の数は0個? 1個? 2個? + こぼれ話 - Qiita