BLOGTIMES
» ArchiveList (Tag for "sh" )
«Prev || 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · | Next»
2023/02/17

xargs で複数のコマンドを実行する

sh  cli 

xargs を使って複数のコマンドを一度に実行する方法がないかと思って調べてみました。

sh -c と組み合わせて、以下のような感じで実行しているパターンが多いようです。
例えばこの例だと find で探したファイルに対して chown でオーナーを変えつつ、パーミッションも同時に変更することができます。

find . -type f | xargs -i sh -c 'chown root "{}" && chmod 600 "{}"'

参考


    at 15:58 |
    2021/08/15

    bash の変数と改行

    sh 

    シェルスクリプトで echo をするときに、変数をダブルクオートで囲った場合とそうでない場合で挙動が違うことに気付いたのでメモ。

    具体的には以下のような感じで、変数内に改行が含まている場合の改行の扱いが変わるようです。
    かれこれ 20 年くらいシェルスクリプト書いていますが、こういう決まりがあることに気付いてませんでした。

    $ hoge=`cat <<EOF > aaa > bbb > ccc > EOF > ` $ echo $hoge aaa bbb ccc $ echo "$hoge" aaa bbb ccc $ echo $hoge | wc -l 1 $ echo "$hoge" | wc -l 3

      at 18:41 |
      2021/05/22

      git リポジトリのリモート URL を一撃で書き換える ( Linux 編 )

      git  sh 

      git のサービス等を乗り換えたりする場合には、ローカルリポジトリのリモート URL を書き換える必要が出てきます。

      1つずつやっても良いのですが、いろいろと面倒なので、現在の URL の一部を置換することリモート URL を書き換えるワンライナーを書いてみました。通常、サービスの乗り換えの場合にはリポジトリ名は URL の一部のみが変わるだけだと思うので、これで十分機能するはずです。

      ここではリモートの URL が https://example.com/foo/bar.githttps://example.jp/foo/bar.git に変更されると仮定すると、以下のような感じでリモート URL の変更が可能です。

      git remote set-url origin $(git remote get-url origin | sed "s|example\.com|example\.jp|")

      ちなみに、Windows の場合は PowerShel を使って同様の操作ができます。


        at 22:28 |
        2021/05/13

        SH-60L の試作機の飛行試験を開始

        SH-60L 

        海自の SH-60K の能力向上型試作機(完成すれば SH-60L)の飛行試験が始まったようです。

        見た目は SH-60J と SH-60K のようなわかりやすい見た目の変化もないようですが、どこかで見にいきたいところです。


          at 22:55 |
          2020/04/13

          PowerShell を CentOS にインストール

          powershell  sh  centos7 

          PowerShell は Linux も公式にサポートしているので、Windows で動かしているバッチを Linux に移植することにしました。
          というわけで、とりあえず CentOS に PowerShell をインストール。

          GitHub からバイナリをダウンロードする手もありますが、今後のアップデート等を考えると yum のリポジトリで入れておく方が管理が楽です。
          CentOS 8 については公式のドキュメントに記載されていませんが、.repo ファイルはちゃんと用意されていてインストールできるようになっています。

          # CentOS 7 curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo sudo yum install -y powershell # CentOS 8 curl https://packages.microsoft.com/config/rhel/8/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo sudo dnf install -y powershell

          参考


            at 09:49 |
            2019/12/06

            dehydrated で JWS has no anti-replay nonce エラー

            letsencrypt  sh 

            Let's Encrypt の証明書を自動更新するために導入した dehydrated ですが、更新に失敗していることに気づいていなくて証明書が失効寸前になっていて冷や汗をかきました。
            実際に出ていたのは以下のような "JWS has no anti-replay nonce" というエラーです。

            # INFO: Using main config file /opt/dehydrated/config Processing host.example.jp + Checking domain name(s) of existing cert... unchanged. + Checking expire date of existing cert... + Valid till Dec 8 23:27:48 2019 GMT (Less than 15 days). Renewing! + Signing domains... + Generating private key... + Generating signing request... + Requesting challenge for host.example.jp... + ERROR: An error occurred while sending post-request to https://acme-v01.api.letsencrypt.org/acme/new-authz (Status 400) Details: { "type": "urn:acme:error:badNonce", "detail": "JWS has no anti-replay nonce", "status": 400 }

            これについては以下で直っていることが確認できたので、git pull して最新版を引っ張ってくるだけで大丈夫でした。


              at 13:55 |
              2019/11/03

              外来機の帰投(入間基地航空祭 2019)

              jsdf  saitama  入間基地  航空祭  F-15  F-2  C-2  AH-1  UH-60  SH-60 
              F-2B(33-8117)タキシング「自衛官募集」 - 外来機の帰投(入間基地航空祭 2019)F-2B(33-8117)アフターバーナを使って帰投 - 外来機の帰投(入間基地航空祭 2019)
              F-15(42-8844)離陸 - 外来機の帰投(入間基地航空祭 2019)F-15(42-8844)アフターバーナを使って帰投 - 外来機の帰投(入間基地航空祭 2019)
              C-2(68-1204) - 外来機の帰投(入間基地航空祭 2019)AH-1S(73482) - 外来機の帰投(入間基地航空祭 2019)
              UH-60J(08-4590) - 外来機の帰投(入間基地航空祭 2019)SH-60K(22-8412) - 外来機の帰投(入間基地航空祭 2019)

              今日は曇りで暗かったので、帰投の時の戦闘機のアフターバーナーがクッキリと見えました。

              昨年は「#ブルーより蒼い方」というのを掲げていて大盛り上がりだった松島の F-2B は今年は普通に自衛官募集だけを掲げていました。


                at 15:04 |
                2019/10/31

                ターミナルのカラー出力を色つきのままファイル保存する

                sh 
                カラー出力 - ターミナルのカラー出力を色つきのままファイル保存する

                Linux などのターミナルでは ANSI のエスケープコードを使えば文字に色をつけることが可能ですが、これをなんとかして色つきのまま保存する方法がないか調べてみました。

                その結果、以下の ansi2html.sh を使うと HTML として保存できることが分かりました。

                例えば、画像の出力を ansi2html.sh に通して HTML 保存するとこのような感じで保存することができます。


                Match #1:

                Binding for "root":
                FunctionDecl 0x7fffd94a0d78 </home/hsur/example.c:3:1, line:6:1> line:3:5 main 'int (void)'
                `-CompoundStmt 0x7fffd94a0f88 <col:15, line:6:1>
                |-CallExpr 0x7fffd94a0ef0 <line:4:2, col:22> 'int'
                | |-ImplicitCastExpr 0x7fffd94a0ed8 <col:2> 'int (*)(const char *, ...)' <FunctionToPointerDecay>
                | | `-DeclRefExpr 0x7fffd94a0e18 <col:2> 'int (const char *, ...)' Function 0x7fffd948fe08 'printf' 'int (const char *, ...)'
                | `-ImplicitCastExpr 0x7fffd94a0f38 <col:9> 'const char *' <BitCast>
                | `-ImplicitCastExpr 0x7fffd94a0f20 <col:9> 'char *' <ArrayToPointerDecay>
                | `-StringLiteral 0x7fffd94a0e78 <col:9> 'char [12]' lvalue "Hello World"
                `-ReturnStmt 0x7fffd94a0f70 <line:5:2, col:9>
                `-IntegerLiteral 0x7fffd94a0f50 <col:9> 'int' 0

                1 match.


                  at 22:28 |
                  2019/09/19

                  Raspberry Pi に Nginx を入れて CGI が動くようにしてみる

                  nginx  raspberrypi  sh 

                  Raspberry Pi に Nginx を入れて、bash で書いたスクリプトを簡単な CGI として動かせるようにしてみたのでメモ。

                  インストール

                  とりあえず apt で nginx と CGI のための fcgiwrap をインストールしておきます。

                  apt update apt -y install nginx fcgiwrap

                  CGI 実行のための設定もろもろ

                  【ubuntu】nginx環境でシェルスクリプトをcgiとして動かす」を参考にさせていただいて、以下のように設定を変更。サンプル用のプログラムも配置してから、nginx と fcgiwrap を起動します。
                  patch がちょっと変な感じになっていますが、これは通常のターミナルには tab 文字が貼り付けできない*1のでそれを \t でエスケーブするようにしているためです。

                  cat << 'EOF' | sed "s/\\\\t/`echo -en '\t'`/" | patch --- /etc/nginx/sites-available/default.org 2019-09-19 22:03:50.770293355 +0900 +++ /etc/nginx/sites-available/default 2019-09-19 22:03:50.770293355 +0900 @@ -61,6 +61,13 @@ \t# # With php-cgi (or other tcp sockets): \t# fastcgi_pass 127.0.0.1:9000; \t#} +\t +\tlocation ~ \.sh$ { +\t\troot /usr/share/nginx/html/; +\t\tfastcgi_pass unix:/var/run/fcgiwrap.socket; +\t\tinclude /etc/nginx/fastcgi_params; +\t\tfastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +\t} \t# deny access to .htaccess files, if Apache's document root \t# concurs with nginx's one EOF cat << 'EOF' > /usr/share/nginx/html/date.sh #!/bin/sh echo 'Content-type: text/html' echo '' /bin/date EOF systemctl start nginx systemctl enable nginx systemctl start fcgiwrap systemctl enable fcgiwrap

                  最後に curl で URL を叩いて、時刻が帰ってくれば設定完了です。

                  curl http://localhost/date.sh
                  • *1: Ctrl+v tab を押すと1文字毎に入力することはできます

                  at 22:28 |
                  2019/09/16

                  帰投を見届けて自分も帰投(令和元年航空祭 in KOMATSU)

                  ishikawa  jsdf  小松基地  航空祭  F-2  UH-1  SH-60  C-2  RF-4 
                  UH-1(41917) - 帰投を見届けて自分も帰投(令和元年航空祭 in KOMATSU)SH-60K(56) - 帰投を見届けて自分も帰投(令和元年航空祭 in KOMATSU)
                  C-2(88-1208) - 帰投を見届けて自分も帰投(令和元年航空祭 in KOMATSU)RF-4(57-6907) - 帰投を見届けて自分も帰投(令和元年航空祭 in KOMATSU)
                  F-2(63-8539) - 帰投を見届けて自分も帰投(令和元年航空祭 in KOMATSU)翼を振る F-2(63-8539) - 帰投を見届けて自分も帰投(令和元年航空祭 in KOMATSU)

                  駅はしばらく大混雑でしょうから、ゆっくりと帰投する機体を見届けてから帰ることにしました。アナウンスで帰投しなようなことを言っていた RF-4 離陸したのにはちょっと驚きました。

                  今年はすんなりそのまま帰ってしまう機体が多く、翼を振ってくれたのは三沢の F-2 くらいでした。というわけで、これにて小松航空祭もミッションコンプリート。僕も帰投することにします


                    at 15:28 |
                    «Prev || 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · | Next»
                    » ArchiveList (Tag for "sh" )