タグ

ShellScriptに関するrAdioのブックマーク (56)

  • Number formatting in BASH with thousand separator

    Collectives™ on Stack Overflow Find centralized, trusted content and collaborate around the technologies you use most. Learn more about Collectives Teams Q&A for work Connect and share knowledge within a single location that is structured and easy to search. Learn more about Teams

    Number formatting in BASH with thousand separator
  • Bashでforよりもwhile readを使い、効率的にファイルと文字列を扱う - grep Tips *

    はじめに Bashでのファイルの読み込み、変数への格納、一時的な環境変数について、forよりもwhile readを使うと便利な点を記載する。 例題として、以下のCSVファイルを読み込んで各列を変数に格納する。 id1,sh id2,bash forを使う場合 forを使うと以下のようになる。 for i in `cat csv` do key=`echo $i | cut -d, -f1` val=`echo $i | cut -d, -f2` echo "$key => $val" done # 出力結果 #id1 => sh #id2 => bash while readを使う場合 while + readに一時的な環境変数を用いると、もっと簡潔に書ける。 while IFS=, read key val do echo "$key => $val" done < csv readの

    Bashでforよりもwhile readを使い、効率的にファイルと文字列を扱う - grep Tips *
  • シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita

    はじめに シェルスクリプトで二重起動防止やロックをする方法を検索すると、いろいろな方法や書き方が見つかりますが、どれを使えばよいのか、当に正しく動くのか、不安になりますよね? ディレクトリ (mkdir) やシンボリックリンク (ln) を使った独自実装の例も見かけますが、エラー発生時や予期せぬ電源断、CTRL+C で止めたときなどでも問題は発生しないのでしょうか? まず、ディレクトリやシンボリックリンクを使った独自実装はしない。これを肝に銘じてください。シェルスクリプトでのロック管理はとても難しく、一般的な排他制御の知識に加えて、シェルスクリプト特有の問題、シグナルやトラップ、サブシェルや子プロセスの問題、さらには特定のシェル固有の仕様やバグなどさまざまな問題に対処する必要があり大変です。独自実装の例では古いロックファイルが残ってしまい、それをいつどのタイミングで片付ければ安全なのか?

    シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita
  • 実行中のシェルスクリプトをchattr(1)を使ってimmutableにするというのはどうか - その手の平は尻もつかめるさ

    [追記] 実行中のシェルスクリプトをchattr(1)を使ってimmutableにするというのはどうか - その手の平は尻もつかめるさ 調べてみたけどこれが良さそう <a href="https://stackoverflow.com/a/3399850/1921216" target="_blank" rel="noopener nofollow">https://stackoverflow.com/a/3399850/1921216</a>2022/01/02 17:02 b.hatena.ne.jp このブックマークコメントで指摘されましたが、immutableにするまでもなくこのラッパースクリプトを噛ませると良さそう。 #!/bin/bash # usage: # sh-run.sh script-you-want-to-run.sh args... set -ue file="$

    実行中のシェルスクリプトをchattr(1)を使ってimmutableにするというのはどうか - その手の平は尻もつかめるさ
  • シェルスクリプト リファクタリング ~遅いシェルスクリプトが供養されてたので蘇生して256倍に高速化させました~ - Qiita

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

    シェルスクリプト リファクタリング ~遅いシェルスクリプトが供養されてたので蘇生して256倍に高速化させました~ - Qiita
    rAdio
    rAdio 2021/12/29
    一定以上複雑で、一定以上パフォーマンスを必要とするようになったら、シェルスクリプトから離れて、他の手段を検討すべき段階に来ていると思った。
  • POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき! - Qiita

    POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき!ShellScriptBashshellPOSIX はじめに find の出力を xargs にパイプで渡すというのはよく見かける使い方ですが、find -print0 | xargs -0 が使えない POSIX 準拠のシェルスクリプトでは find -exec {} + を使った方が良いです。安全かつ十分に速いからです。よく見かける -exec {} ; ではなく -exec {} + ですので間違えないようにしてください。多くのケースでは + の方が優れているのですが ; ばっかり使われているのを見ると、意外と知られてない気がします。 少しだけ予備知識として、-exec {} ; は -exec {} \; と ; をバックスラッシュでエスケープするのがよく見る使い方

    POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき! - Qiita
  • シェルスクリプトの [ は /bin/[ と言ったり [ "x$var" = "xval" ] と書く人はオジサン - Qiita

    # Ubuntu 20.04 の bash での実行結果 # シェルから [ が何として見えているか $ type [ [ is a shell builtin # PATH から見つかる全ての [ コマンドを出力する # 補足 zsh では which がシェルビルトインコマンドで、シェルビルトイン版の [ も出力される $ which -a [ /usr/bin/[ /bin/[ $ type [[ [[ is a shell keyword # zsh では [[ をパターンとして認識してしまうのでダブルクォートが必要 $ type "[[" [[ is a reserved word ちなみに [ の外部コマンド版が /usr/bin/ と /bin/ の両方にあるのは Ubuntu 20.04 では /bin が /usr/bin へのシンボリックリンクになっているからです。Ub

    シェルスクリプトの [ は /bin/[ と言ったり [ "x$var" = "xval" ] と書く人はオジサン - Qiita
  • Bashの便利な構文だがよく忘れてしまうものの備忘録

    Bashでスクリプトを書く場合のポイントをまとめた Bashなどで書くシェルスクリプトは文法がシンプルで覚えると便利。他のプログラム言語だと何行もかかなければならないファイル操作や中身のデータ処理を、ちょちょいと数行レベルで書けとても強力だ。コマンドとの親和性が高い恩恵だろう1。 旧来バッチ処理で領を発揮するシェルスクリプトだったが、昨今はDockerDockerfileや起動スクリプトなど)で活用される機会も多いだろう。 しかしながら他のプログラム言語ではみられない記法があったり、逆に似た書き方もあったりと、混乱しがちなのもシェルスクリプトの特徴かもしれない。 いちいちGoogle先生に確認するのもめんどうなので、このページに整理した2。 主な参照先(よくお世話になっているページ): UNIXの部屋(68user's page) - http://x68000.q-e-d.net/~

    Bashの便利な構文だがよく忘れてしまうものの備忘録
    rAdio
    rAdio 2021/04/30
    本当にPOSIX標準でポータビリティ万全のものと、bash固有のものが判断できずにいつも困る。しかもそれである程度は運用できてしまって、時間が経ってから何かの契機で問題にぶち当たったりするから余計に困る。
  • シェルスクリプトを書くときにいつもやるやつを調べた

    bash のシェルスクリプトを書くときに、いつも脳死で以下をやっている。(同僚が整備してくれたものをコピペしている) エディタなり CI で shellcheck をまわす set -euxo pipefail と冒頭に書く こんな感じ #!/bin/bash set -euxo pipefail いつまでもコピペではさすがにアレなので、意味を調べたメモ。 shellcheck koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts イケてない書き方に警告を出してくれる それぞれの警告にはエラーコード割り振られていてとても便利 エラーコードごとに正誤例、解説が書かれているのでわかりやすい SC1000 の例 CI もそうだし、エディタのプラグインも充実 しているのでとりあえず入れておくと良い set

    シェルスクリプトを書くときにいつもやるやつを調べた
  • シェルスクリプトで自作関数にパイプの結果を渡す

    my_func () { argument=$(パイプで受け取る) echo "my_func: $argument" } echo "hoge" | my_func # my_func: hoge my_func () { if [ -p /dev/stdin ]; then echo "*** From pipe ***" argument=$(cat /dev/stdin) # alternative: $(cat -) else echo "*** NOT from pipe ***" argument=$1 fi echo "my_func: $argument" } echo "hoge" | my_func # my_func: hoge [ -p /dev/stdin ]の中の-pは対象がパイプファイルであれば真となる。 catに-を与えると標準入力から読み込みを行う。ca

  • Bashスクリプトで実行ファイルのディレクトリを取得する - オープンソースこねこね

    よくやるのが以下の記述だったのだけれど SCRIPT_DIR=$(cd $(dirname $0); pwd) これだと、このスクリプトをシンボリックリンクから呼び出したときに、 実ファイルのパスでなくリンク先のディレクトリが取得されてしまっていた。 シンボリックリンクから呼び出されたときも、実ファイルのパスを返すようにするには、 SCRIPT_DIR=$(cd $(dirname $(readlink $0 || echo $0));pwd) のようにすればよさげ。 追記)id:ngyukiさんにご指摘をいただいたので修正。 スクリプトがシンボリックリンクなディレクトリにあることを考慮して readlink -f とか cd -P とか pwd -P とかにするとなお良いのかな おお、なるほど。やってみたら確かにシンボリックリンクなディレクトリにあるとうまくいかなかった。なので修正した以

    Bashスクリプトで実行ファイルのディレクトリを取得する - オープンソースこねこね
  • Welcome to m-bsys.com

    Welcome to m-bsys.com If you are the domain administrator get started creating your home page with Google Sites

  • Pushbullet+自前デバイスでプッシュ通知を受け取る

  • 第377回 Pushbulletで通知をお手軽にしてみよう | gihyo.jp

    ご家庭で常時動いているサーバーの情報をどのように通知していますか? メールや専用のミドルウエアを利用して通知している方も多いかと思いますが、メールサーバーやミドルウェアなどの構築となると少しハードルが高くなってしまいます。 今回はPushbulletの紹介と併せて、UbuntuでPushbullet利用してお手軽にサーバーの情報を通知してみます。 Pushbulletとは? Pushbulletはサイトの説明にあるように、スマートフォンやタブレット、PCなどのデバイス間を接続するサービスで、スマートフォンやタブレットからの通知をデスクトップへ、またその逆へとデバイス間の通知を共有できるサービスです(図1⁠)⁠。 図1 Pushbullet 対象となるデバイスは、AndroidiPhoneといったスマートフォンをはじめとし、ChromeやFirefox、SafariやOperaなどのブラウ

    第377回 Pushbulletで通知をお手軽にしてみよう | gihyo.jp
  • 404 Not Found|ハンズラボ株式会社

    Webページが見つかりません 可能性のある原因 ・アドレスに入力の間違いがある可能性がある。 ・リンクをクリックした場合には、リンクが古い場合があります。 アドレスを再入力するか、前のページに戻る、 またはメインのサイトに移動して必要な情報を探してください。

    404 Not Found|ハンズラボ株式会社
    rAdio
    rAdio 2020/01/08
    『はじめの一歩に必要な知識がシンプルすぎるため、初学者がユニケージ以外の技術を学習する意欲が高くなくあまりにも業務系知識に偏っている場合(略)結果としてチーム・組織全体の技術レベルにキャップがかかって』
  • 回る長い猫のシェル芸 - Qiita

    回る長いのシェル芸とは? このgifアニメーションを生成するシェル芸です。 コマンド 以下のコマンドで生成することができます。 $ eval "convert -delay 10 <(longcat -n 10 -o /dev/stdout) -flatten -scale 150x600! -rotate -90 -write mpr:a +delete `for i in {30..600..30};do echo -n "\( mpr:a -roll -$i+0 -wave 20x120 -distort arc 360 \) ";done`/images/x.gif"

    回る長い猫のシェル芸 - Qiita
  • UNIX・Linuxでファイル名・フォルダ名の一括置換を行う | 俺的備忘録 〜なんかいろいろ〜

    LinuxやUNIXを利用していると、スクリプト名などのファイル名のルールが変更したため、一括で置換を行いたいときがある。 そんな時は、どうすればいいのだろうか? 1.『rename』コマンドを利用する もし『rename』コマンドがあるようならば、これを利用するといいだろう。 Linuxには大体最初から用意されている。(なお、Ubuntuの場合だと置換の指定方法がPerl(sed)の指定方法になっている) rename 置換する単語 置換後の単語 対象PATH この対象PATHにはワイルドカードも利用できるので、以下のように一括で置換を行える。 [root@test-centos7 test]# ls -l 合計 0 -rw-r--r--. 1 root root 0 7月 3 06:37 TCScript0.sh -rw-r--r--. 1 root root 0 7月 3 06:37

  • Latest topics > tmuxとかの仮想端末で複数の画面間でBashのコマンド履歴を共有すると同じ履歴が何度も記録されてしまう問題を解決する - outsider reflex

    Latest topics > tmuxとかの仮想端末で複数の画面間でBashのコマンド履歴を共有すると同じ履歴が何度も記録されてしまう問題を解決する 宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行まんがでわかるLinux シス管系女子の試し読みが可能! « 説明すること、理解を求めること、自分が相手を理解すること、目を逸らさず自分の非に向き合うということ Main 技術書典4に参加して「まんがでわかるLinux シス管系女子3」とかグッズとか頒布しました » tmuxとかの仮想端末で複数の画面間でBashのコマンド履歴を共有すると同じ履歴が何度も記録されてしまう問題を解決する - Mar 04, 2018 このエントリはQiitaとのクロスポストです。 まんがでわかるLinux シス管系女子の74ページ

  • Bashで多重起動防止する - N/A GARAGE

    Bashで多重起動防止する August 28, 2018 Bash 若いのから「バッチの多重起動を防止するのになんでロックディレクトリなんですか?ロックファイルじゃだめなんですか?」と聞かれたので、メモ。 バッチ処理を作成する際、多重起動を防止することがあると思いますが、特にそれがシェルスクリプトで書かれている場合には、ロックディレクトリを作って排他制御を行います。 若いのが言うようにロックファイルでやろうとすると多分こうなるでしょう。

    Bashで多重起動防止する - N/A GARAGE
  • シェルスクリプトを高級言語のような書き味に近づける Tips 集 | 創作メモ帳

    Bash は言わずと知れた歴史あるコマンド言語です。テキストにコマンドの羅列を記述するだけで、手軽にシェルスクリプトとして実行することができます。 シェルスクリプトの実体はシェルコマンドの羅列に過ぎませんが、手続き型プログラミング言語にあるような制御構文も備えています。変数や条件分岐、ループ、関数などです。これらを使えばシェルスクリプトでプログラミングも可能です。 もちろん、現代の一般的なプログラミング言語と比べると機能は限られます。他の言語には見られないシェルスクリプト特有の癖や記法も数多くあり、最近の言語に慣れている人ほど、つまずくポイントが多いです。 しかし、シェルスクリプトだからこその良さもあります。Bash は現在でも多くの OS で標準シェルとして採用されており、普段使っているシェルコマンドを書くだけで動かせる手軽さは何者にも代えがたいです。一度身につけておくと長く使えるお得な

    シェルスクリプトを高級言語のような書き味に近づける Tips 集 | 創作メモ帳
    rAdio
    rAdio 2018/12/12
    Bashに限らず、特定シェルの独自機構に慣れすぎると、環境が変わった時になかなかすぐに適応できずに戸惑って、半ばやけっぱちになりながらプレーンな/bin/shにダイブしたりする。