タグ

ブックマーク / qiita.com/ko1nksm (7)

  • 祝🎉 POSIX.1-2024 (Issue 8) 改定!16年ぶりの大幅改定でシェルスクリプトはどう新しくなるのか? - Qiita

    FreeBSD では 2024-05-31 に 200112 から 200809 への変更がようやく行われました(一度間違えて 200808 と書いてしまっていますが)。 https://cgit.freebsd.org/src/commit/?id=2e30926a68 https://cgit.freebsd.org/src/commit/?id=6e0278408e macOS は FreeBSD のユーザーランドのコマンドを使用しているため、そのせいで 200112 のままだった可能性も考えられますが、シェルやカーネルは FreeBSD のものではないため、FreeBSD が変更になったからと言って macOS が更新されるとは限らないでしょう。Solaris 10 と 11 ではディレクトリごとに準拠バージョンが異なるバイナリが配置されており以下のようになります。Solaris

    祝🎉 POSIX.1-2024 (Issue 8) 改定!16年ぶりの大幅改定でシェルスクリプトはどう新しくなるのか? - Qiita
  • 真の UNIX 標準規格 System V Interface Definition (SVID) について - Qiita

    はじめに POSIX のコマンド一覧を見てやけに少ないなと思ったことはないでしょうか?例えば useradd がないのでユーザーが作れませんしcrontab はあるのに cron がないと中途半端です。重要なものがいくつも欠けおり、あれだけのコマンドでは到底 Unix を使うことができません。実は「Unix に実装すべき最低限の仕様」を定義した標準規格は他にありました。それが UNIX をこの世に生み出した AT&T 自身による標準規格 System V Interface Definition (SVID) です。この記事は POSIX に敗れて消えてしまったもう一つの UNIX 標準規格 SVID ・・・のコマンドの話です。(私の知識不足により C 言語インターフェースの話は含まれません。) SVID と POSIX の歴史 SVID は POSIX よりも早く標準規格を発表しています

    真の UNIX 標準規格 System V Interface Definition (SVID) について - Qiita
  • シェルスクリプトで変数に改行文字を入れる方法の細かすぎる解説 - Qiita

    すべての POSIX シェルで使用可能なので私はこれを推奨します。シェルスクリプトの改行コードは Windows の CR+LF ではなく LF を使用している前提です。いくつかの環境ではシェルスクリプトの改行コードに CR+LF を使用していても動くようなのですが(未調査)、遅かれ早かれ問題になるはずです。また需要は少ないと思いますが、POSIX シェル以前の Bourne シェルでも使える(おそらく)唯一の方法です。Solaris 10 などの古い環境にも対応させるのであればこの方法しかありません。 メリットはコードの量が最も少なく最も速いということです。デメリットは 2 行になるため少し不格好でインデントをする場合に困るだけですが、インデントに関してはこのような定数はスクリプトの上部の関数の外で定義するので通常は問題にならないはずです。 LF=$'\n' bash、ksh、mksh、

    シェルスクリプトで変数に改行文字を入れる方法の細かすぎる解説 - Qiita
  • なぜシェルスクリプトはPOSIX準拠でも環境依存が激しいのか? 〜POSIXの問題点とその解決策の案〜 - Qiita

    なぜシェルスクリプトはPOSIX準拠でも環境依存が激しいのか? 〜POSIXの問題点とその解決策の案〜ShellScriptBashshellPOSIX まえがき この記事は「シェルスクリプトで高い移植性と生産性を両立させるシリーズ」の第一弾です。移植性と生産性を両立させるための前提知識として POSIX コマンドの問題点について解説します。第二弾では高い移植性と互換性を実現させるための考え方、そして第三弾、第四弾ではそれを実現するシェルスクリプトの具体的な実装テクニックを紹介します。第五弾では現実的な問題と回避方法について解説する予定ですがまだ具体的な内容は決まっていません。第五弾はその前に「シェルスクリプト入門(仮)」の記事を書こうと思ってるので少し遅くなると思います。もし興味がある方は記事をストックしていると更新時に通知されると思います。 2021-07-11 追記 記事が長くなった

    なぜシェルスクリプトはPOSIX準拠でも環境依存が激しいのか? 〜POSIXの問題点とその解決策の案〜 - Qiita
  • シェルスクリプト リファクタリング ~遅いシェルスクリプトが供養されてたので蘇生して256倍に高速化させました~ - Qiita

    はじめに ことの始まりは「シェルスクリプトでツールを作ったけど速度が遅くて使い物にならなかったので供養」というツイートを見たからです。コードを見てみると、実例をあまり見ないシェルスクリプトのリファクタリング例として丁度良い内容と分量だったため記事にいたしました。記事を書くにあたりコードの利用を快く承諾していただいた @Hayao0819 様にはこの場を借りて御礼を申し上げます。 内容は章立てで構成しており、序章で事前調査をし、第一章で一般的なリファクタリング、第二章でパフォーマンスを重視したリファクタリング、終章で少し余談をして締めくくっています。最初はパイプは並列処理されるから速くなるというのは神話(そうとは限らない)についても書いていたのですが流石に長いので分けました。それでも書きたいことを色々書いていたらめちゃくちゃ長くなってしまいましたので読み物として私がどんなことを考えながらリフ

    シェルスクリプト リファクタリング ~遅いシェルスクリプトが供養されてたので蘇生して256倍に高速化させました~ - Qiita
    korin
    korin 2021/05/07
  • POSIX準拠シェルスクリプトでマルチコアの能力を活用する並列処理の実装(最大並列数あり、GNU Parallel, xargsなし) - Qiita

    実は最大並列数の制限がなければジョブ(標準入力からの一行単位のデータ)の数だけバックグラウンドプロセスを起動すればいいのでかなり簡単に実装できます。ですが普通は嫌ですよね?ということで最大並列数を制限する処理を入れています。また通常の利用で必要になりそうな CTRL-C と TERM シグナルへの対応もしています。 #!/bin/sh set -eu [ "${ZSH_VERSION:-}" ] && setopt shwordsplit MAX_PROC=4 # 最大並列数 # INT(CTRL-C)、TERM による終了処理 terminate() { trap '' TERM kill -TERM 0 exit "$1" } trap "terminate 130" INT trap "terminate 143" TERM # trap : CONT # 並列で実行される処理 fu

    POSIX準拠シェルスクリプトでマルチコアの能力を活用する並列処理の実装(最大並列数あり、GNU Parallel, xargsなし) - Qiita
    korin
    korin 2021/03/02
  • スクリプト言語としてみた各POSIXシェルの特徴と互換性上の注意点まとめ - Qiita

    はじめに この記事は私の主観かつ知っていることをまとめたものです。古くからのシェルの専門家とかではなくここ数年の間に必要になった時にその都度調べたものなので間違いとかもあると思います。またタイトルの通りスクリプト言語としての比較です。つまりインタラクティブシェルの機能についての比較はしていません。(そもそも使い込んでるわけじゃないので知らないです。)POSIX シェルに限定しているのも私が他のシェルを詳しく知らないからです。もし今も使われていて(もしくは開発中で)ここに書かれていない POSIX シェルがありましたらコメントで教えて下さい。(※ csh, tcsh, fish は POSIX シェルではありません。) シェルの系統は少し古いですが「What does it mean to be “sh compatible”?」に投稿されている図が詳しくてわかりやすいです。またこちら「~s

    スクリプト言語としてみた各POSIXシェルの特徴と互換性上の注意点まとめ - Qiita
  • 1