タグ

bashに関するa_bickyのブックマーク (15)

  • bashのプロセス置換で遊んでみよう! | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ]

    株式会社ラクーンホールディングスのエンジニア/デザイナーから技術情報をはじめ、世の中のためになることや社内のことなどを発信してます。 bashインフラLinuxプロセス置換ファイルディスクリプタシェルスクリプト こんにちは、羽山です。 今回は意外と知らないかもしれないbashの「プロセス置換」という機能を紹介します。 UNIXでは「1つのプログラムは1つの機能にとどめ、フィルタとして動作できるようにせよ」という設計思想があります。 その言葉の通り、大抵のコマンドはパイプでつないでフィルタのように動作可能ですが、必ずしも理想的に設計されていない、もしくは仕様上できないコマンドもあります。 例えば、よく使う diff コマンドがこれにあたります。 指定するファイル名を - とすれば片方は標準入力から読み込めますが、もう片方はどうしても引数で指定しなければいけません。 コマンドの実行結果を直接比

    bashのプロセス置換で遊んでみよう! | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ]
    a_bicky
    a_bicky 2019/04/30
    diff <(...) <(...) はよく使ってたけど cmd1 2> >(cmd2) みたいな使い方は知らなくて目から鱗だった
  • 原理原則で理解するbashの仕組み - Qiita

    はじめに 以前書いたエントリー、重大な脆弱性(CVE-2017-5932)で少し話題になったbash4.4の補完機能の便利な点で、bash4.4からでないとタブの補完機能のソート処理が制御できないという問題について、ソースコードレベルで調べた結果をまとめていたのですが、bashの実装そのものを深く掘り下げ過ぎてしまい、内容が膨大になったので、何回かに分けて書こうと思います。 今回はbashが起動されてからインタラクティブモードでキーボードの入力を待ち受けるまでのお話です。普段使っているbashがどのような処理を行っているのか一緒に覗いてみませんか? 検証ソースコード Bash version 4.1.0(1) release GNU bashの生誕 bashのプロセスが起動されるのはOSへのログイン時にユーザーのログインシェルがbashに設定されている場合、あるいはログイン後に明示的にba

    原理原則で理解するbashの仕組み - Qiita
    a_bicky
    a_bicky 2018/02/12
  • bash&zshでシングルクォートのエスケープ - ボクノス

    ハマったのでメモ。 bash&zshでシングルクォートのエスケープをする場合はちょっとしたテクニックが必要らしい。 ダメダメ例 ダメダメなエスケープ。 % echo 'tanaka\'s OS' quote>残念ながら'tanaka\'で終わってしまう。 回避する。 エスケープするにはちょっとしたテクが必要。 % echo 'tanaka'\''s OS' tanaka's OS'\''という意味不明なエスケープをする。 何故か? 分解してみる。 % echo 'tanaka' \' 's OS' tanaka ' s OSシングルクォートの中で\'というエスケープが出来ないので、一旦文字列を終了し、\'を入力。もう一度文字列を再開する。 まとめ シングルクォートのエスケープはかなり面倒。 shも同様なので、シェルスクリプトを書く際は要注意。 ダブルクオートなら"tanaka's OS"だ

    bash&zshでシングルクォートのエスケープ - ボクノス
    a_bicky
    a_bicky 2013/04/15
    bash だとシングルクォート内でシングルクォートをエスケープすることができないので '\'' とするとな
  • echoの移植性のなさ(改行抑止) - mikedaの日記

    Redhat系のLinux、Solarisをよく使います。 コマンドの違いはtarのzオプション、gzgrepとzgrep、findのコマゴマした仕様など、いろいろあるんですが意外なところではechoの改行抑止があります。 先日、Linuxで動いていた/bin/shスクリプトがSolarisではちゃんと動かない、ということがあり、原因を調べたら次の1行でした。 echo -n `date +%s` この1行で、Linuxだと改行なしのタイムスタンプ、例えばが「1235256375」、が表示されますが、Solarisだと「-n 1235256375<改行>」という全く違う出力が得られます。 echoの改行抑止の方法は2種類あり、LinuxとSolarisでは挙動が変わってきます。さらにややこしいのはただechoと打ったときに呼び出されるのはシェルの内部コマンドのechoであり、/bin/ec

    echoの移植性のなさ(改行抑止) - mikedaの日記
  • bash,dash,zshのreadコマンドと「while read line」のような行ごとの読み込み処理について跡地 - 試験運用中なLinux備忘録・旧記事

    (2021/9/29)記事は「bash,dash,zshのreadコマンドと行ごとの読み込み処理(while read)」へ移動した。

    bash,dash,zshのreadコマンドと「while read line」のような行ごとの読み込み処理について跡地 - 試験運用中なLinux備忘録・旧記事
  • bash のビルトインコマンド “local” について - いままでのこと

    実験のまとめ。 前置き bash では特に指定しない限り、 変数は常にグローバル な変数として扱われてしまいます。 #!/bin/bash function foo() { hoge="foo" } foo echo $hoge # foo と出力される 変数をつくるたびに、グローバルな領域を汚染していくのはよろしくないので、ここではグローバル化の対策として bash のビルトインコマンド local を使用します。 #!/bin/bash function foo() { local hoge="foo" } foo echo $hoge # 空出力 このように、明示的に local の変数だよーって宣言してあげると、関数をでたときには忘れる。なんだか逆な気がしますが...。 題 bash では for ループに使用する変数 や、read で受け取る変数 も他の変数と同様に、特に指定し

    a_bicky
    a_bicky 2012/02/14
    bashのlocalについて
  • Multiple variable assignments from command output in BASH Using date, read

    It's quite easy to capture the output of a command and assign it in a shell's variable: day=$(date +%d) month=$(date +%m) But, what if we want to perform the same task with just one program invocation? Here comes the power of eval! date(1) outputs a string like "day=29; month=07; year=11" (notice the semicolons I added on purpose at date's custom output) which is a legal shell line. This like is t

    a_bicky
    a_bicky 2012/01/25
    bash で read day month year <<< $(date +'%d %m %y') みたいにすると同時に変数を定義できるとか驚愕
  • GitHub - szermatt/emacs-bash-completion: Add programmable bash completion to Emacs shell-mode

    a_bicky
    a_bicky 2012/01/23
    Emacsのshellの補完をカスタマイズできる
  • bash-completionで独自の補完関数を作成する方法(gistyのサブコマンドを補完するやつ書いてみた) - 今日もスミマセン。

    歳のせいか最近記憶力が落ちてるので補完に頼ってみることにした。 以下を行なうにはbash-completionパッケージが必要です。 macportsだと sudo port install bash-completionでインストールされるはず。 バージョン1 とりあえず、サブコマンドを全部登録してみました版 _gisty() { COMPREPLY=(list post private_post sync sync_delete pull_all about help) } complete -F _gisty gisty上記を/opt/local/etc/bash_completion.d/の配下にgistyという名前で保存 以下のように設定ファイルを読み込み $ . /opt/local/etc/bash_completion"gisty "と打ってtabを押すと about li

    bash-completionで独自の補完関数を作成する方法(gistyのサブコマンドを補完するやつ書いてみた) - 今日もスミマセン。
    a_bicky
    a_bicky 2012/01/23
    bashの補完機能のカスタマイズ方法
  • Exit Codes With Special Meanings

    Table E-1. Reserved Exit Codes Exit Code NumberMeaningExampleComments

    a_bicky
    a_bicky 2012/01/20
    一般的な exit status の意味
  • Advanced Bash-Scripting Guide

    This tutorial assumes no previous knowledge of scripting or programming, yet progresses rapidly toward an intermediate/advanced level of instruction . . . all the while sneaking in little nuggets of UNIX® wisdom and lore. It serves as a textbook, a manual for self-study, and as a reference and source of knowledge on shell scripting techniques. The exercises and heavily-commented examples invite ac

    a_bicky
    a_bicky 2012/01/20
  • BASH Programming - Introduction HOW-TO

    by Mike G mikkey at dynamo.com.ar Thu Jul 27 09:36:18 ART 2000 This article intends to help you to start programming basic-intermediate shell scripts. It does not intend to be an advanced document (see the title). I am NOT an expert nor guru shell programmer. I decided to write this because I'll learn a lot and it might be useful to other people. Any feedback will be apreciated, specially in the p

    a_bicky
    a_bicky 2011/12/26
  • Stray Penguin - Linux Memo (BASH)

    exp で 1文字を対象にしたいのであれば ?([a-f]) のようにクラスを併用することも可能。必ずしも `|' を使わなければならないわけではない。また、正規表現は ?(bash@(ref)) のように入れ子にすることもできる。 Bashで正規表現(2) ([[ =~ ]]オペレータ) 二重の `[[' を使い比較演算子に `=~' を使うと、右辺は拡張正規表現とみなされる。前項とは異なりこちらは物の正規表現だ。面白いのは、マッチ部分が BASH_REMATCH という配列にアサインされるという点。 VAR=$(LANG=C date +'%c') # VAR='Wed Dec 22 22:51:41 2010' DAYOFWEEK=Wed PATTERN='^'$DAYOFWEEK' ([[:alpha:]]{3}) [[:digit:]]{2} ([0-9:]+)' [[ $VA

    a_bicky
    a_bicky 2011/08/14
    bashはそれなりに使えてると思ってたけど全然だった・・・
  • UNIXシェルスクリプトメモ(Hishidama's UNIX shell script Memo)

    -xを付けると実行内容を表示しながら実行する。[2008-11-29] bash -x スクリプトファイル -nを付けると、実行せずにファイル内の構文解析(エラーの有無のチェック)を行う。[2008-11-29] bash -n スクリプトファイル . スクリプトファイル 現在実行中のシェルと同じシェルを使ってスクリプトを実行する。 スクリプトの中で環境変数を設定した場合、現在のシェルの環境にも影響する (スクリプトの中で定義した環境変数が実行元でも有効になる)。 ファイルに実行権限(chmod +x)が付いている場合は、以下のようにして実行できる(相対パスで指定している)。 ./スクリプトファイル ファイルに実行権限(chmod +x)が付いており、かつ環境変数PATHにカレントディレクトリ「.」が含まれている場合は、以下のようにして実行できる。 スクリプトファイル シェルスクリプトの書

  • bashにて複数端末間でコマンド履歴(history)を共有する方法 (iandeth.)

    Tera Term 等の端末を複数同時に立ち上げて作業したり、screenにて複数の仮想端末を同時並行で操作する際、コマンド実行履歴が端末間で共有できなくて困る事が多々あります。「さっきのfindコマンドをもう一度... 引数どう書くんだっけなぁ... あ、確かコマンド履歴にあったはずだなぁ... ちっ、それはあっちの端末の履歴だったか」みたいな。zshには端末間のコマンド履歴を常に同期できる'SHARE_HISTORY' なるオプション(*1)があって素敵なのですが、同じことを bash で実現する方法を調べたのでご紹介。 (*1) zshの同機能について詳しくはITmedia記事 "豪傑の三種の神器【後編】" を参照の事 不具合) 通常設定のbashで困る事 1. 複数端末間でコマンド履歴の共有ができない 同時に立ち上げている端末間で履歴の共有ができなくて不便に感じることがある。 2.

    a_bicky
    a_bicky 2010/08/23
  • 1