タグ

bashに関するiwwのブックマーク (280)

  • Bash で PROMPT_COMMAND を使わずに PS1 を動的に変更 - Qiita

    はじめに PROMPT_COMMAND とは PROMPT_COMMAND に関数やコマンドがセットされていると、Bash でプロンプトを表示する直前に、毎回それが実行されます。 この機能を利用して PS1 を動的に書き換える例を見かけることがあります。 PS1 内でコマンドの出力を表示する しかし、PS1 内でも関数やコマンドを実行して、結果の文字列を表示することができます。1 ただ、うろ覚えでこの辺りの設定をしていたところ、少々ハマってしまったので、実際に自分が間違えた例と合わせて、正しい設定方法を記しておきます。 よく使われる git-completion を題材に用います。 ※以降の例で、git-prompt.sh 相当のものは読み込み済みとします。 間違い例1

    Bash で PROMPT_COMMAND を使わずに PS1 を動的に変更 - Qiita
    iww
    iww 2024/08/24
    あとで使う
  • いい加減シェルスクリプトで [ $? -eq 0 ] や [ $? -ne 0 ] なんて エラー処理を書くのはやめよう! - Qiita

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

    いい加減シェルスクリプトで [ $? -eq 0 ] や [ $? -ne 0 ] なんて エラー処理を書くのはやめよう! - Qiita
    iww
    iww 2024/08/21
    コマンドの実行を if文の中に書きたくないんだよ! という話
  • ldd(1) の動的な側面が悪い方向に際立つ例 - flatlineの日記

    思えば1年半も前のことだったが... 分かりやすい例に仕立ててみよう.以下の内容のCソース hugebss.c を作る: char arr[sizeGb*1024ULL*1024ULL*1024ULL]; int main() { } 長い配列 arr のサイズを変えて2通りにコンパイルし, ldd(1) してみる: $ gcc -DsizeGb=1ULL hugebss.c -o 1gb.exe $ ldd 1gb.exe linux-vdso.so.1 => (0x00007fffa1799000) libc.so.6 => /lib/libc.so.6 (0x00007f338e5f6000) /lib64/ld-linux-x86-64.so.2 (0x00007f338e96a000) $ gcc -DsizeGb=64ULL hugebss.c -o 64gb.exe $ ld

    ldd(1) の動的な側面が悪い方向に際立つ例 - flatlineの日記
    iww
    iww 2024/07/28
  • bashのファイルID=255 - Linuxの備忘録とか・・・(目次へ)

    bashプロセスは、ファイルIDを0/1/2の標準入出力/エラー以外に、標準エラーをdupした255のファイルIDを有しています。ただし、子プロセス(コマンド)は、255のファイルIDを継承しません。このファイルIDについててです。 #include "stdio.h" int main() { while (1) sleep(10); return 0; } [root@localhost test]# ./child_of_bash & [1] 1294 [root@localhost test]# ps PID TTY TIME CMD 1183 pts/0 00:00:00 bash 1294 pts/0 00:00:00 child_of_bash 1295 pts/0 00:00:00 ps [root@localhost test]# ls -l /proc/1183/fd/

    iww
    iww 2024/06/21
    『bashプロセスは、ファイルIDを0/1/2の標準入出力/エラー以外に、標準エラーをdupした255のファイルIDを有しています。』
  • コマンドラインツールを書くなら知っておきたい Bash の 予約済み Exit Code - Qiita

    上記の表の通り,Exit Code 1, 2, 126〜165, 255 は特別な意味を持ち,スクリプトやプログラム内で exit に指定するパラメータとしては避けるべきである.とりわけ,Exit Code 127 はトラブルシューティングで混乱の元である("command not found" で終了したのか,プログラム固有のエラーなのか区別できなくなる).しかしながら,多くのスクリプトが exit 1 を一般的な実行を続行できないエラーとして使っている.Exit Code 1 は Bash の一般的なエラーを含め,とても多くのエラーで発生しうるので,デバッグの時に切り分けが大変になるだろう. Exit Code を体系立てて定義する試みはある(/usr/include/sysexits.h)が,これは C と C++ プログラマー向けである.スクリプトに関しても同様な感じにするのが適切

    コマンドラインツールを書くなら知っておきたい Bash の 予約済み Exit Code - Qiita
    iww
    iww 2024/06/21
    結局、bashで 雑多で適当なエラー は何番を使えばいいんだろう
  • シェルスクリプト(Bash): \ で改行してる時の 1 行コメントアウト - Qiita

    somecommand --optionA=xxxx \ --optionB=yyyy \ --optionC=zzzz \ --optionD=wwww

    シェルスクリプト(Bash): \ で改行してる時の 1 行コメントアウト - Qiita
    iww
    iww 2024/02/23
  • Bashにおけるインクリメントの方法 - やってみる

    様々ある。 参考 https://rcmdnk.com/blog/2013/11/13/computer-bash 方法 ((count++)) let count++ count=\expr $count + 1`` ((count++)) OK count=0 while [ $count -lt 3 ]; do ((count++)) done count=$((++count))の部分は、以下のように置き換えることができる。 : $((count++)) count=$((++count)) count=$((count+1)) ((count++)) (事前に数値として初期化(count=0等)した場合のみ) 実行速度が速い。表記も短い。ただし、以下のようにわずかな表記の違いでバグる罠が多数ある。 NG 1 count=0 while [ $count -lt 3 ]; do c

    Bashにおけるインクリメントの方法 - やってみる
  • 【Bash】 スクリプト中のaliasコマンドが実行できない - takafumi blog

    環境   archlinux 4.14.4-1 非インタラクティブモードではaliasは展開されない。 非インタラクティブとは $ bash test.sh みたいに実行する事。 普通に実行すると以下のようになる $ cat ~/.bashrc alias ll='ls -la' $ bash test.sh test.sh: line 5: ll: command not found BASH_ENVで.bashrcを読み込ませてみる $ BASH_ENV=~/.bashrc bash test.sh alias ll='ls -la' test.sh: line 5: ll: command not found aliasは読み込まれるが、実行しようとすると展開されない。 対処法 man bashにちゃんと書いていた。 Aliases are not expanded when the

    【Bash】 スクリプト中のaliasコマンドが実行できない - takafumi blog
    iww
    iww 2023/12/22
    shopt -s expand_aliases
  • SC2181 · koalaman/shellcheck Wiki · GitHub

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    SC2181 · koalaman/shellcheck Wiki · GitHub
    iww
    iww 2023/08/31
    if文の式にコマンド入れたくないんだよ
  • シェルスクリプトのシバン(Shebang)にシェル以外のコマンドを記述したらどうなるのか? | ゲンゾウ用ポストイット

    ゲンゾウ用ポストイット シェル / Bash / Linux / Kubernetes / Docker / Git / クラウドのtipsを発信。 はじめにUNIX 上で動作するスクリプトは、1 行目に #! から始まる 1 行を記述します。 これによりスクリプトの実行系を認識させることができます。 シェルスクリプトの場合は #!/bin/sh 、 #!/usr/bin/bash 、 #!/usr/bin/env bash と記述します。 Ruby スクリプトの場合は #!/usr/bin/ruby 、 #!/usr/bin/env ruby と記述することが多いでしょう。 この 1 行目の記述のことを「 シバン 」とか「 Shebang 」と呼びますが、今ひとつこのあたりの仕組が理解できてなかったため、シバンでいろいろ遊んでみることにしました。 検証環境$ uname -moi x86

    シェルスクリプトのシバン(Shebang)にシェル以外のコマンドを記述したらどうなるのか? | ゲンゾウ用ポストイット
    iww
    iww 2023/08/24
    『このように整理できると、シェルスクリプトの中で ${0} という組み込み変数が 実行されたスクリプトファイルのパス を示している仕組みが理解できるようになります。』
  • バッチファイルからBashシェルスクリプトを実行する方法 - Engineer's Notebook

    Cygwin + Bashシェルスクリプトってほんとに便利! 最近は WSL が流行りですが、まだまだCygwinの出番も多いですよね。 そんな便利なBashシェルスクリプトですが、Batファイルと違ってエクスプローラーから直接実行できないのが難点です。 そんなときはBashシェルスクリプトを起動するBatファイルを作ってみましょう。 ここからの解説はCygwinを前提にしていますので、あらかじめCygwinをインストールしておいてください。 バッチファイルからBashシェルスクリプトを実行する方法 bash.exeにコマンド(シェルスクリプト)を渡すことでバッチファイルからBashシェルスクリプトを実行することができます。 @SETLOCAL @SET PATH="C:\cygwin64\bin";%PATH% @SET CHERE_INVOKING=yes @SET LANG=ja_J

    バッチファイルからBashシェルスクリプトを実行する方法 - Engineer's Notebook
  • シェルスクリプトで標準出力と標準エラー出力に別々の色をフィルタでつける - Qiita

    画面にログを出力する時、標準出力と標準エラー出力に別々の色がついていると見やすいですよね? 標準出力に出力する場合は out 関数、標準エラー出力で出力する場合は error 関数のよう別々の関数を使って色をつけて出力する方が簡単ですが、場合によっては後からフィルタで標準出力と標準エラー出力それぞれに色をつけたほうが楽な場合もあります。 この記事では題材として出力に色をつけていますが、一般化して言うと標準出力と標準エラー出力のそれぞれに対してパイプで異なるフィルタ(コマンド・シェル関数)を適用させたい場合の書き方です。 関連記事として「POSIX準拠シェルのためのpipefailとPIPESTATUSの実装(改良版)」も紹介しておきます。 0. 共通処理 最初に共通で使用する関数を定義しておきます。 #!/bin/sh set -eu ESC=$(printf '\033') colori

    シェルスクリプトで標準出力と標準エラー出力に別々の色をフィルタでつける - Qiita
    iww
    iww 2023/06/17
    標準エラー出力を赤くする
  • printenv、env、set、exportコマンドの違いに関して

    作成日:2020/01/29 CentOS / Redhat Enterprise Linux における変数関連のコマンドを紹介します。 (*)bash を想定しています。他のシェルでは動作が異なる可能性が高いので注意してください。 参考:シェル変数と環境変数の違い シェル変数:シェル内のみ有効 環境変数:子シェル、シェルから実行したプログラムにも引き継がれる変数。 (注意)分かりやすく簡単に記載しており、一部の環境や分野では記載内容が異なる可能性があります。あくまでも参考程度でお読みください。 比較表 比較は以下の表の通りとなります。

  • bash でコマンドの実行結果をファイルとして扱う - Diary

    プロセス置換(Process Substitution)を用います。使い方と一緒に、ぜひ名前も覚えましょう。 使い方 # 通常のファイル入力の場合 $ cat test.txt # コマンドの実行結果をファイルとして扱う場合 $ cat <(echo "hoge from echo command") hoge from echo command ファイル名を<(コマンド)で置き換えるだけです! <と(の間にスペースはいりません。 少し具体的なコマンドで見てみます diff コマンド diff <(echo 3.0+3 | bc) <(echo $((3.0+3)) ) 1c1 < 6.0 --- > 6. 片方をファイルにして、もう一方をプロセス置換にすることもできます $ cat file.txt file $ diff file.txt <(echo "content") 1c1 <

    bash でコマンドの実行結果をファイルとして扱う - Diary
    iww
    iww 2023/02/27
  • 【Linux】diffでコマンド実行結果を比較する

    この記事では次の実行例について紹介します。 コマンドの実行結果同士の比較 コマンドの実行結果とファイルの中身を比較 diffで改行が入ると差分がでてしまう問題の対策 コマンド実行結果同士の比較 結論としてはdiff <(コマンド1) <(コマンド2)のかたちで記述すれば良いです。 下記の例は同じディレクトリに対してls -lを実行しているので差分なしとなります。 $ diff <(ls -l) <(ls -l) こちらの例は、同じディレクトリに対してls -l とlsでコマンドの実行結果を比較しています。 -lオプション有り無しでは実行結果が違うので差分が出ています。 $ diff <(ls -l) <(ls) 1,2c1 < total 0 < -rw-r--r-- 1 root root 0 9月 13 21:41 hoge --- > hoge コマンド実行結果とファイル中身を比較

    iww
    iww 2023/02/27
  • .bash_profileと.bashrcなんて使い分けなくてよかったんや! - Qiita

    この記事の内容 .bash_profile と .bashrc の使い分けの説明はいろいろあるんですが、 どうにも腑に落ちなかったので、私なりに調べてみました。 で、自分的にはこれで必要十分な理解ができたと思ったので投稿。 とりあえずここまで理解すれば、後はその都度対処していけるかなー、と。 2018/03/20追記 :もともと合わせて1つの記事にする予定だった 「Linuxでシェル間の設定の引継ぎを蛇足感満載で確認した」という記事を投稿しました! こちらと合わせて読んでいただけると嬉しいです。 スーパー忙しい人のための結論 設定はすべて.bashrcに書く これでいいんやで。 動作確認の環境 Windows10のHyper-V上で動いているCentOS7で動作を確認 CentOS7はインストール直後の状態で試しているので設定ファイル等は書き換えていない OSインストールのグループ(最小限

    .bash_profileと.bashrcなんて使い分けなくてよかったんや! - Qiita
    iww
    iww 2022/12/29
    .profileと.bashrc はごっちゃにしてるとつまらない事故のもとになるので、面倒でもきちんと使い分けたほうがいいです。 という話
  • bashの組込みコマンド自作によるスクリプトの高速化 - 覚書

    はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合

    bashの組込みコマンド自作によるスクリプトの高速化 - 覚書
  • SC1072 · koalaman/shellcheck Wiki · GitHub

    iww
    iww 2022/10/18
    なんかバグらしい。日本語コメントがあると構文解析できなくなってアホになるらしい。 とりあえず、使い物にはならない
  • Can I use a variable in a Bash brace expansion?

    iww
    iww 2022/09/15
    {0..$HOGE} が展開されないやつ
  • suとsudoの違い - Qiita

    suとsudoはオプションの違いはあるものの、できることはほぼ重複している。 ただ、suは切替先ユーザー(root)のパスワードが要求されるのに対し、sudoは元のユーザーのパスワードが要求される。sudoは/etc/sudoersで権限を細かく設定できるので、どちらか片方だけ覚えるならsudoだけを覚えておくとよい。 オプションによって実行後のカレントディレクトリや環境変数が変わってきて、それでハマることがあるので違いをまとめておく。 (Amazon Linuxで確認。CentOSでもほぼ同じと思うが、他のディストリビューションでは違う可能性あり) コマンド .bash_profile .bashrc pwd HOME PATH

    suとsudoの違い - Qiita