タグ

Shell-Scriptに関するmasa8aurumのブックマーク (21)

  • 【完全版】歴史でシェルの設定ファイルを理解する - 全POSIXシェル対応 (.profie, .bash_profile, .bashrc, .zprofile, zshrc, etc.) - Qiita

    プロファイルでできることは環境の設定だけです。シェルの設定は実際にはできないことはないのですが、やっても無意味なことになるのでできないとします。無意味なことになるというのは新しく起動したシェルにはプロファイルで行うシェルの設定は反映されないということです。環境の設定とは、特定のシェルに依存しない初期化処理のことで、その一つが環境変数の設定です。環境変数は OS の機能であってシェルの機能ではありません。環境の設定には、他に stty コマンドによる端末の設定や umask コマンドによる umask の設定などがありますが、プロファイルで設定することはあまりありません。 rc ファイルでは環境の設定とシェルの設定の両方ができます。シェルの設定、例えばプロンプト文字列の設定やシェルの機能を有効にしたり補完スクリプトの読み込みなどは rc ファイルに書きます。つまり、ほとんどのことは rc フ

    【完全版】歴史でシェルの設定ファイルを理解する - 全POSIXシェル対応 (.profie, .bash_profile, .bashrc, .zprofile, zshrc, etc.) - Qiita
    masa8aurum
    masa8aurum 2024/11/05
    ・Bourne シェルは古すぎて POSIX に準拠していない ・zshはbashの後継ではなくkshの後継 / 知らなかった
  • Nushell - 型付きシェルの基本とコマンド定義

    はじめに これまで Zenn では fish shell の記事をいくつか書いてきましたが、現在は Nushell という新しいシェルを使っています。 実は Nushell のことは以前から知っていましたが、利用されているプログラミング言語の概念やその恩恵についての知識が無かったため、より初心者にわかりやすい fish shell を利用していました。最近になって型システムや関数型言語などについての概念を取得したため、ようやく Nushell を使い始められました。 Nushellでの分かりやすいエラーメッセージ 使い始めてからまだ1ヶ月ぐらいですが、かなり奥が深く一つの記事で解説しきるのは難しいので、この記事では基体な設定と型とコマンドについて重点をおいて最後は具体的なカスタムコマンドの定義をいくつか取り上げて解説したいとおもいます。 Nushellとは Nushell とは "A n

    Nushell - 型付きシェルの基本とコマンド定義
  • いい加減シェルスクリプトで [ $? -eq 0 ] や [ $? -ne 0 ] なんて エラー処理を書くのはやめよう! - Qiita

    はじめに [ $? -eq 0 ] や [ $? -ne 0 ] は冗長でデメリットしかありません。非常に多く見かける書き方ですが、1979 年に Bourne シェルが広く公開された時からこのようなコードは必要ありませんでした。実際に当時はこのような書き方は使われておらず、このような書き方をしなければならなかった歴史的な経緯などはありません。これはなぜか広まってしまった良くない書き方です。 優れたコードとは無駄がないシンプルなコードです。丁寧なコードとは無駄な処理を書くことではありません。[ $? -eq 0 ] や [ $? -ne 0 ] は書かないほうが、簡単で読みやすくわかりやすくなります。優れた文法を持つシェルは短いコードで正しく動作し、良い書き方は最短の時間と最小の手間で目的を達成することができます。コマンドのエラー処理を簡潔に書くことができるのが、シェル言語の優れている点の

    いい加減シェルスクリプトで [ $? -eq 0 ] や [ $? -ne 0 ] なんて エラー処理を書くのはやめよう! - Qiita
    masa8aurum
    masa8aurum 2024/08/21
    確かに、 if [ $? -eq 0 ] みたいにtestコマンドを挟む意味ないな。testコマンド自体が終了ステータスを返し、ifはそれを判定するのだから / そもそも「外部コマンドで判定」が落とし穴をはらんでいる気もする
  • Bourneシェルの終焉まで残り1年(→3年) ~ 新しいシェルへの移行は完了していますか? - Qiita

    はじめに 30年以上もの長い間 UNIX を支えてきた Bourne シェルも UNIX のサポート終了とともに消え去ろうとしています。みなさん、他のシェルへの移行はお済みでしょうか? 残り一年、まだ移行が済んでいないという人のために、移行のための簡単なガイドラインと各シェルの特徴をまとめました。 関連記事 シェルとUNIXコマンドの未来 ~ これからの10年で起きるシェルスクリプトの変化 残り1年というのはどういうこと? Bourne シェルは POSIX に準拠していない古いシェルです。最初の Bourne シェルは 1979 年に登場し、最終バージョンは 1992 年のものです。ちゃんとしたデータを持っているわけではありませんが、現在 Bourne シェルを使っている最もシェアが高いと思われる UNIX は Solaris 10 です。ただし Solaris 10 では 1989 年

    Bourneシェルの終焉まで残り1年(→3年) ~ 新しいシェルへの移行は完了していますか? - Qiita
    masa8aurum
    masa8aurum 2023/12/31
    “sh は昔は Bourne シェルのことでしたがそれも過去の話です”
  • bash初期化ファイル読み込みの順番 まとめ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 疑問 普段何気なく使っている .bashrc ですが、bashの場合下記のファイルもスタートアップの時に使えます。 .bash_login .bash_profile .bashrc .profile 一体何が違うのでしょうか? 忙しい人のために、先に まとめておきます。 まとめ bashは、 ログインシェルとして起動された場合、 /etc/profile をまず読み込む その後、以下のファイルを順番に探して、最初に見つけたファイルのみを起動スクリプトとして読み込む。 ~/.bash_profile ~/.bash_login ~/.p

    bash初期化ファイル読み込みの順番 まとめ - Qiita
  • シェルの展開順序に気をつけよう - Qiita

    Shell Script Advent Calendar 2016の12月17日エントリーです(途中途切れてるので日数計算は不明)。 初級者向けの基礎知識として、シェルの展開順序について書きます。ここではbashを例に説明しますが、基は各種シェルに共通していると思います。 展開と実行の順序 端末やシェルスクリプトなどでシェルを使うときには、展開順序を意識していないと思わぬ失敗をすることがあります。展開(expansion)とは、ファイル名のパターン(ワイルドカード)やシェル変数などの処理です。 展開のメカニズムは普通のプログラミング言語のモデルと大きく異なる点の一つです。たとえば、多くのプログラミング言語の文法では変数は値の一種として扱われますが、シェルの文法では変数が展開されてから実際の処理が実行されます。このあたりの感覚は、C言語のプリプロセッサマクロなどに近いかもしれません。 ba

    シェルの展開順序に気をつけよう - Qiita
  • Bashのシェル展開 | フューチャー技術ブログ

    Photo by Fotis Fotopoulos on Unsplash はじめにこんにちは、TIGの岸卓也です。 シェルスクリプト連載 の7日目です。 シェルスクリプトで前提とするシェルは、大抵のコンピューターにインストールされていることが多いbashを選択することが多いと思います。当記事ではそのbashを対象に、意外と色々あるシェルの展開処理の概要をまとめました。シェルスクリプトに限らず普段のコマンド操作でも展開処理が便利なシーンは多々あると思いますので、皆さんの時間の節約に役立てば幸いです。 以降では、処理される順番に展開処理を紹介します。また、説明している動作と具体例はGNU bash version 5.1.4で確認しました。 なお、Windowsでは初期状態ではbashがありませんが、インストールする方法はいくつかあります。gitを使うためにインストールするGit for

    Bashのシェル展開 | フューチャー技術ブログ
  • シェルの処理順序 - はてブロ@ama_ch

    詳解 シェルスクリプト 作者: Arnold Robbins,Nelson H. F. Beebe,日向あおい出版社/メーカー: オライリージャパン発売日: 2006/01/16メディア: 大型購入: 6人 クリック: 193回この商品を含むブログ (37件) を見る 今読んでる詳解シェルスクリプトにシェルの処理順序が詳しく書いてあり、とっても参考になったのでメモしておきます。 p.176 7.8 処理の順序とevalコマンド より 標準入力やスクリプト中の各行からシェルへと読み込まれる1行分のデータを、パイプラインと呼ぶ。パイプラインには1つまたはそれ以上のコマンドが記述され、それぞれの間にはパイプ記号(|)やその他の記号(;, &, &&, ||)が記述される。シェルは読み込んだパイプラインをコマンド単位に分割し、それぞれについて以下の順に処理を行う。 スペース、タブ、改行、;、(、

    シェルの処理順序 - はてブロ@ama_ch
  • シェルスクリプトでlsをパイプでつなぐのはなぜ悪いのか ~ ShellCheck: SC2010, SC2011, SC2012 とファイル名改行問題 - Qiita

    シェルスクリプトでlsをパイプでつなぐのはなぜ悪いのか ~ ShellCheck: SC2010, SC2011, SC2012 とファイル名改行問題ShellScriptUNIXshellシェル芸POSIX はじめに シェルスクリプトで ls コマンドの出力結果(ファイル名一覧)をパイプで他のコマンドに渡して処理するのは推奨されません。ls コマンドを使ったコードを ShellCheck で検査するとおそらく問題があると警告が表示されるでしょう。ls を使うなという指摘自体には賛成なのですが SC2010、SC2011、SC2012 に書いてある理由については正しい説明がされていないと思っています。この記事ではなぜ ls の出力結果を他のコマンドにパイプで渡すのが悪いのか、ls を使わずに実現するにはどうしたら良いのかを解説したいと思います。一つ補足をしておくと、この問題は CLI コマ

    シェルスクリプトでlsをパイプでつなぐのはなぜ悪いのか ~ ShellCheck: SC2010, SC2011, SC2012 とファイル名改行問題 - Qiita
  • なぜシェルスクリプトで高度なデータ管理にSQLiteを使うべきなのか? ~ UNIX/POSIXコマンドの欠点をSQLで解決する

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 「利用者は数十億人!? SQLiteはどこが凄いデータベース管理システムなのか調べてみた」の続きです。 はじめに 複雑な構造のデータを扱うのであればシェルスクリプトや Unix (POSIX) コマンドでデータ管理を行うのは避けるべきだと思います。解決不可能な問題が多いからです。しかしそれでも何かしらの理由でやろうと考える(やらなければいけない)のであれば SQLite を使うのをおすすめします。シェルスクリプトや Unix コマンドは行単位の単純なテキストデータをシーケンシャルにデータ処理するのが前提となっており、改行や空白が含まれる

    なぜシェルスクリプトで高度なデータ管理にSQLiteを使うべきなのか? ~ UNIX/POSIXコマンドの欠点をSQLで解決する
  • Sed で文字列置換をするときはリダイレクトではなく -i オプションを使う - Qiita

    久々に sed を使ったらハマったので備忘録としてメモ。 やりたかったこと 以下のようなファイルがありました。

    Sed で文字列置換をするときはリダイレクトではなく -i オプションを使う - Qiita
    masa8aurum
    masa8aurum 2021/10/18
    ・UNIX シェルで `>` でリダイレクトを行うと、まずリダイレクト先のファイルを空で初期化する。 同じファイルに対してリダイレクトするのは危険。・sed でファイル内容を置換する場合は -i (--in-place) オプションを使う
  • シェルスクリプトの変数はダブルクォートしなければいけない!という話 - Qiita

    TL; DR 変数をダブルクォートしない使い方は上級者向けの危険な機能です! $@ と $*(または配列の全要素)をダブルクォートしない使い方は知る必要すらありません! ShellCheck を導入すれば誰でも簡単に正しい書き方がわかります!! 2021-08-21 補足 この記事は dash や bash などの POSIX シェルの一般的な動作を解説しており zsh のデフォルトとは異なります。記事の中でも説明していますが zsh の場合はシェルのオプションを変更することで POSIX 準拠の動作に変更することができます。zsh に関しては後半の「zsh に関する注意点」も参照してください。 はじめに プログラミング言語は、言語によって記号の意味が異なることがよくあります。クォーテーションマークはその一つです。C 言語ではシングルクォートは文字リテラル(一文字)を意味し文字列はダブルク

    シェルスクリプトの変数はダブルクォートしなければいけない!という話 - Qiita
    masa8aurum
    masa8aurum 2021/08/27
    ネット上のシェルスクリプトの例はクォートがダメな例が多いので、この記事のようなちゃんとした解説を読むべき
  • Bash semicolon being equal to newline is not exactly true?

    masa8aurum
    masa8aurum 2020/03/16
    bash の if 文や for 文でセミコロンと改行は等価ではない(thenやdoの後にセミコロンを入れるとエラー)理由 →正確には「リストの中で等価」なだけ
  • Bash: .bashrcと.bash_profileの違いを今度こそ理解する|TechRacho by BPS株式会社

    こんにちは、hachi8833です。社内Slackで見かけたmorimorihogeさんの以下の書き込みで目から鱗が落ちました。 ~/.bashrcで何かを出力してしまうと、rsyncなどのsshパイプで問題が生じることがあるそうです。 参考: 知らないとrsyncでもハマるシェル初期化 - Qiita これをきっかけに、できるかぎり一次情報を元になるべく一般的になるようにまとめてみました。 シェルスクリプト(.bashrcや.bash_profileなども含む)はあまりに自由に書けてしまい、LinuxディストリビューションやmacOSによって作法がまちまちだったりするので、外してはいけないポイントがどこかを知りたかったのでした。 対象はbashとsh(Bourne Shell)に限定します。また、デスクトップGUIの設定ファイルについては最小限にとどめます。 bashのmanページ 元記

    Bash: .bashrcと.bash_profileの違いを今度こそ理解する|TechRacho by BPS株式会社
  • Bash scripting best practices - sap1ens blog

  • 優れた dotfiles を設計して、最速で環境構築する話 - Qiita

    Repost ➔ 優れた dotfiles を設計する | TELLME.TOKYO OS のクリーンインストールは面倒くさい. アプリケーションをいちいちダウンロードしてきて,普段の勝手と同じになるように設定する必要がある.CLI においても同じで,設定ファイルをいちいち書いたり,普段どんなプラグインを使っていたかを思い出してダウンロードするのは面倒だ. よくあるのは .vimrc などの設定ファイルを Dropbox や GitHub に置いておいて,環境を作り直したときにコピーする手法だ. dotfiles はその手法の延長線上にあって,より便利に高速化・自動化した方法だ. dotfiles とは UNIX 系の OS でいう設定ファイルのことで,ファイル名がドット . から始まることからそう呼ばれている. TL;DR HTTP 経由でインストールできる dotfiles をつくって

    優れた dotfiles を設計して、最速で環境構築する話 - Qiita
  • CentOSにてディレクトリを監視し、操作をログに記録する方法 - Qiita

    背景 CentOS 5.10 上の特定ディレクトリが何故か消えるという問題が発生していたため、犯人を特定する 手順 inotify-toolsで特定ディレクトリへの操作をログに出力し、いつ時点で消えたかを確認する psacctプロセスアカウンティングコマンドでいつ時点でどのユーザがしでかしたのかを確認する historyからユーザのどのコマンドで消えたのかを特定する 仕込み historyコマンドに時間が表示されるようにする /etc/profile を編集する $ sudo vi /etc/profile 以下を追記 各ユーザの~/.bash_profileが編集されている場合、上書きされてしまう。 → 最悪全ユーザのbashrcに仕込んでおく? ファイル再読み込み $ sudo source /etc/profile 時間が出力されることを確認 $ history プロセスアカウンティ

    CentOSにてディレクトリを監視し、操作をログに記録する方法 - Qiita
    masa8aurum
    masa8aurum 2018/06/23
    特定ディレクトリが消える事態が発生したとき、犯人を特定する方法。いちおうブクマ。
  • シェルスクリプトの罠を避ける三つの tips

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん

    シェルスクリプトの罠を避ける三つの tips
  • Shell Style Guide

  • Are there naming conventions for variables in shell scripts?