タグ

shellに関するmizdraのブックマーク (33)

  • Bashで$(cat foo.txt)していませんか?$(< foo.txt)しよう - Lambdaカクテル

    以下の文書はBashを使う前提の話。 Bashにはコマンド置換(Command substitution)というのがある。$(another-command)のように、$()でコマンドを括る記法だ。これを利用すると、括弧で括られたコマンドが実行され、その標準出力が文字列として取り出され、$()全体を置き換える。シェルスクリプトでは非常によく見る技術だ。 この$()でファイルの内容を読み出すというのを最近見た。このような用法は非常によく見る。 foo-command $(cat params.txt) しかし、より良い書き方があるのでこれを提唱したい。$(< params.txt)と書くことで全く同等のことができる。しかも速いのでこちらのほうが完全に上位互換となる。 foo-command $(< params.txt) この方法はBashのドキュメントのコマンド置換のコーナーにちゃんと書か

    Bashで$(cat foo.txt)していませんか?$(< foo.txt)しよう - Lambdaカクテル
    mizdra
    mizdra 2024/06/07
    知らなかった
  • The Bun Shell | Bun Blog

    JavaScript is the world's most popular scripting language. So why is it hard to run shell scripts in JavaScript? import { spawnSync } from "child_process"; // this is a lot more work than it could be const { status, stdout, stderr } = spawnSync("ls", ["-l", "*.js"], { encoding: "utf8", });

    mizdra
    mizdra 2024/03/10
  • VSCode の Integrated Terminal における 設定ファイルの読み込み順序(MacOS,Z shell) - 金魚亭日常

    VSCode の Integrated Terminal の PATH が重複があったり順番が変なことになっていたりして,色々調べた. iTerm の場合,自分が設定を書いているファイルでは, ~/.zshenv /usr/libexec/path_helper 実行 PATH の 重複削除,システムのPATHが含まれている場合は削除 システムのPATHの後ろに削除後のユーザーPATHを追記 .profile .zshrc で PATH ができるが,VSCode の Integrated Terminal の場合,これがもう一周実行されているみたいだ. つまり,(4) まで実行された後のPATHに対して,(1) から (4) までがもう一度行われる. とりあえず,~/.zshenv には pyenv の設定しか書いていなかったので,これを ~/.zshrc に移動したが,まだおかしいのでな

    VSCode の Integrated Terminal における 設定ファイルの読み込み順序(MacOS,Z shell) - 金魚亭日常
  • jqでURIエンコードする

    ごく稀にbashなどのシェルや、CLIプログラムで使用するプログラムから日語などをURIエンコードしたいことがあると思います。 そのためにrubyやnode.jsを動かすのも面倒だなぁ、と思っていたのですがjqでもできることがわかったのでメモしておきます。 やり方$ echo "日語" | jq -Rr @uri %E6%97%A5%E6%9C%AC%E8%AA%9E # echoには改行(\n)が含まれるがそれも含める場合 $ echo "日語" | jq -sRr @uri %E6%97%A5%E6%9C%AC%E8%AA%9E%0Aオプションの説明-R, --raw-input: JSONとしてパースせず、行ごとに文字列として処理を行う-r, --raw-output: 文字列として出力を行う@uri: percent-encoding を行うほかにもこんなのがありました。(j

    jqでURIエンコードする
    mizdra
    mizdra 2023/05/25
    GitHub Actions の ubuntu runner に入っているものだけで凌ぎたくて、nkf 使うわけにもいかないしどうしようかな、と困ってたので助かりました。jq 便利。
  • BashとZshの “**” (globstar) の挙動の違い

    “**” (globstar) とは globの構文として使える、0個以上のディレクトリに再帰的にマッチするワイルドカードです。 例えば、a/**/zは a/z, a/b/z, a/b/c/z… にマッチします。 元々はzshで実装され、Zsh 2.2で**の形式として定着したようです1。 その後、Bash 4.0でもglobstarオプションを有効にすることで使えるようになりました2。 globの構文はPOSIX.2にも定義されていますが、そこには**は含まれていないため、処理系によって動作がまちまちになっています。 この記事では、bashとzshでの挙動の違いを紹介します。 BashとZshでの挙動の違い 次のようにディレクトリとファイルを用意し、bash、zshそれぞれでマッチするかどうかを確かめ、結果を表にまとめました。 環境はdocker ubuntu:focal、bash 5.

    mizdra
    mizdra 2023/05/23
  • (結論はまだ出てない)ターミナルをいい感じにしたい話 - 駄文日記 2nd side

    ここ1年ぐらい*1から、ターミナル環境を良くしようという活動を頑張っている。 今使ってる環境が Windows / macOS / Manjaro Linux と、完全マルチプラットフォームな感じになっておりそれぞれで違うものをあんまり使いたくはない。 悩んでるけど結論が出ないので、ここに備忘録的にかいておこうと思う。 設定管理 github.com Chezmoi www.chezmoi.io 以前記事も書いたけど、クロスプラットフォームなうえにスクリプトも実行できるのちょっと嬉しい。 deflis.hatenablog.com Sheldon github.com 最近やめたので理由を書いておこうと思って。 Chezmoiにはexternalという機能があって、これで外部リポジトリのデータを管理することができるので、実はシェルプラグインの管理はほとんどChezmoiだけでできてしまうこ

    (結論はまだ出てない)ターミナルをいい感じにしたい話 - 駄文日記 2nd side
  • zshでPATHが壊れないようにPATHに新しいディレクトリを通す - Acme::AnaTofuZ->new;

    TL;DR 特に順番は気にしないとき path+=('/hoo/bar/baz'); 最初にいれたいとき path=('/hoo/bar/baz' $path) PATH通そうとして壊れるヤツ UNIXを使っている上で避けて通れないのが環境変数$PATHでしょう。 :区切りにディレクトリを列挙して、列挙されているディレクトリ直下に置かれているバイナリファイルをコマンドとして使えるようにするアレですね。 そんな$PATHに新しいディレクトリを追加しようとして、ついつい次のような事故がよく置きます。 export PATH="/hoo/bar/baz" こうしてしまうと最初から$PATHに設定していたデータが吹っ飛んで、PATHの中身が/hoo/bar/bazだけになってしまいます。こうなるとlsとかのコマンドが使えなくなる訳ですね。 zshだと$pathで配列として扱える この問題は何が原因

    zshでPATHが壊れないようにPATHに新しいディレクトリを通す - Acme::AnaTofuZ->new;
    mizdra
    mizdra 2023/01/08
    ミスに気づきやすくなるのは嬉しいけど `+` や ` $path` をつけ忘れた時にめちゃめちゃにならない機能も付いてて欲しい! ちょっと typo したら大惨事になるのを避けたい。
  • Macでの/usr/binの罠と.zshenv そしてVim高速化へ...

    長年の疑問、不満が完全ではないが一気に解決しましたのでここにまとめます。xcodebuild 許さんぞ 概要 Mac は UNIX 準拠の OS で、とても便利なコマンド資源が使えて良いのですが、開発関係のコマンド実行が異様に遅い時があるという問題を使い始めて間もなく感じるようになっていました。僕の使用用途として、以下がとても不満でした。 man ascii 等の man ページが表示されるのに5秒ほどかかることがある gcc が実際に実行されるまでオーバーヘッドを感じることがある Vim で Syntastic.vim というプラグインを使用して保存する際に、よく固まる 要はコマンドの実行が遅い時があり、しかしながら一度実行されてしまうと2回目以降からはしばらく高速だということです。なんだかとても中途半端な現象でググっても出てこず、色々とモヤモヤしていました。 コマンドの遅さにキレた 流

    Macでの/usr/binの罠と.zshenv そしてVim高速化へ...
  • 使用頻度とコマンド (エイリアス) の文字数を合わせたい - id:onk のはてなブログ

    1 文字エイリアスのすゝめ 1 文字エイリアスが好きで、例えば alias s="git status -sb" している。 入社してからの 4 年半で溜めた 53 万行の .zsh_history から集計すると、 $ history 1 | awk '{ print $2 }' | sort | uniq -c | sort -nr | head 121714 g 114128 s 57124 v 34210 cd 26095 tig 23281 rg 11382 plenv 10837 t 9647 :q 6867 ll となった。ちなみに以下の略です。 alias g="git" alias s="git status -sb" function v() {vi -p ${${=*/:/ +}/:*}} alias t="tig" alias :q="exit" alias ll=

    使用頻度とコマンド (エイリアス) の文字数を合わせたい - id:onk のはてなブログ
    mizdra
    mizdra 2022/08/06
    無茶苦茶良い…
  • Warp: Your terminal, reimagined

    Warp is the terminal reimagined with AI and collaborative tools for better productivity.

    Warp: Your terminal, reimagined
  • esbuildでお手軽にbookmarkletを作る - rochefort's blog

    bookmarkletをnpm scriptで簡単に作成できないか検討してみました。 前提 即時関数化 メインの話とはずれますが、 bookmarkletはglobal汚染してしまうので、即時関数化が必要です。 これはJS側に書いておくことにします。 (※即時関数もbookmarklet生成時に追加することは可能ですが、今回やってませんよという話。) ご参考) IIFE (即時実行関数式) - MDN Web Docs 用語集: ウェブ関連用語の定義 | MDN minify esbuildはtsでの利用も可能で軽量なのと、minifyオプションが付いていて簡単に1liner化できます。 今回は、これを利用することにしました。 npm script shellを書いてもよかったのですが、JSで完結したく、npm scriptでできないか検討しました。 当初 echo -n javascri

    esbuildでお手軽にbookmarkletを作る - rochefort's blog
    mizdra
    mizdra 2022/06/26
    シェルの変数展開使うの面白い
  • なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記

    会社の中でシェルスクリプトについての話をすることにしたので、このエントリはそのためのものです。 個人的な好みとかもいろいろ入ってしまっているので、そのあたりは取捨選択してください。 なぜ今シェルスクリプトを学ぶのか 公開されているSREをマルっとPDF化する SpotBugsのViolationレポートをMerge Requestのコメント投稿する ぼくの互換性についての考え方 何で書くか シェルスクリプトをうまく書くには ShellCheckを使う バッドパターンとその修正 line-by-lineの処理が多い lsを使う ls /directory | grep mystring ls | grep -v 'log$' lsの結果をループさせる 良いシェルスクリプトを書くためのTIPS set -euする 文字列は基的にクオートする 局所変数にはlocalを使う 定数は読み取り専用

    なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記
    mizdra
    mizdra 2022/05/01
    良い
  • shellでパスワードプロンプトの入力を間違えたらControl-uする理由 - yujioramaの日記

    追記(2022/03/20) Linux限定だし概要レベルだけど包括的なドキュメントがあった。 2. Keyboard generalities キー入力したときに起きていることを説明している。 キーボードコントローラはキーボードドライバにスキャンコードを送信する (スキャンコードモードの)キーボードドライバはアプリケーションプログラムにスキャンコードを送信する (キーコードモードの)キーボードドライバはキー押下、キー離上それぞれのスキャンコードをキーコードに変換し、アプリケーションプログラムに送信する (それ以外の)キーボードドライバはキーコードでキーマップを辞書引きして、発見した文字列(エスケープシーケンスの場合もある)をアプリケーションプログラムに送信する 「アプリケーションプログラムに送信する」は、実際には「端末ドライバに送信する」に相当する。 (端末ドライバ=sttyなのかな)

    shellでパスワードプロンプトの入力を間違えたらControl-uする理由 - yujioramaの日記
    mizdra
    mizdra 2022/03/12
    知らなかった
  • chezmoi で dotfiles を手軽に柔軟にセキュアに管理する

    dotfiles マネージャの chezmoi についてまとめました。 個人的にかなり便利だと思います。 chezmoiとは? chezmoi は、.vimrc や、.zshrc などの dotfiles の管理を効率的に実現するためのツールです。 シンボリックリンク不要でコマンド 1 つで環境を再現出来る template 構文で変数の展開や処理の分岐を書くことで各環境の差分を 1 ファイルで管理できる 1password などのパスワードマネージャとの併用でセキュアにファイル管理ができる という特徴があります。 特に 2 と 3 は通常のシンボリックリンクでの dotfiles 管理だと Shell Scriptをかなり頑張らないと出来ない部分ですが、chezmoi なら手軽に実現できます。 基操作 イントール Homebrew でインストール出来ます。 chezmoiプロジェクト

    chezmoi で dotfiles を手軽に柔軟にセキュアに管理する
    mizdra
    mizdra 2022/02/20
  • PowerShell「全員が全員 /bin/bash だと思うなよ」 - ちょっと株式会社 社員ブログ

    はじめまして.ちょっと株式会社で技術顧問をしています,池口といいます.普段は別の会社で働きつつ,副業という形で参画させていただいております.ブログもたまに書こうかと思っておりますので,よろしくお願いします. そもそもシェルとは?さて,みなさんがお使いのシェルは何でしょうか.シェルは, OS の機能を呼び出したり別のアプリケーションを呼び出したりするためのコマンド言語インタプリタです[1] .具体的には bash や fish , zsh などが挙げられます.macOS の場合,既定のシェルは zsh です.これをそのまま使っているという方も多いでしょう.GNU/Linux の場合はほとんどのディストリビューションで bash が採用されています. bash や zsh は POSIX 互換モードを持っている[2] [3] こともあってか幅広く使われています. しかし,これらのシェルはとても

    PowerShell「全員が全員 /bin/bash だと思うなよ」 - ちょっと株式会社 社員ブログ
    mizdra
    mizdra 2022/01/29
    文字列以外も渡せたら良いじゃんというのは確かに目から鱗が落ちた
  • 実行中のシェルスクリプトを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にするというのはどうか - その手の平は尻もつかめるさ
    mizdra
    mizdra 2022/01/02
    なるほど
  • How to check if commands enabled in POSIX shell script

    #posixismadvent この記事はPOSIX原理主義Advent Calendarの17日目だ。 POSIX原理主義を実践していくうえで,POSIX規格外のコマンドを使う場合は,交換可能性を担保しなければならない。その際にコマンドが利用可能かどうかの判定が必要となる。そこで,POSIXに準拠したコマンドの利用可能判定方法を解説する。 結論としては,用途に応じて以下の2コマンドを利用すればよい。 command -v hoge >/dev/null && echo "OK" hash hoge 2>/dev/null && echo "alias OK"コマンドが存在するかどうかを判定するコマンドとしてwhichコマンドが存在する。しかし,このwhichコマンドはPOSIXで未定義なので,whichコマンド自体が常に使えると保証できない。 実はコマンドの有無を判定できるコマンドはいく

    How to check if commands enabled in POSIX shell script
    mizdra
    mizdra 2021/06/08
    まとまっていてありがたい
  • GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts

    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

    GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts
    mizdra
    mizdra 2020/03/03
    シェルスクリプトを静的解析して警告やヒントを出してくれる
  • 実行中のプロセスの終了を検知して通知をするpeepというのを作った | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/peep なにかコマンドを実行して、思ったより時間がかかりそうな場合、終了を通知して欲しくなること、あると思います。それをしてくれるのが peep です。言うなれば、 horenso の後付版です。 使い方はめちゃくちゃ簡単で、以下のようにpidと、その後に任意のコマンドを指定します。 % peep $pid -- /peth/to/notification-script 当該 $pid のプロセスが終了したら、指定したコマンドが動くという仕組みです。なんと、リモートプロセスの終了も検知できます。 インストール go get % go get github.com/Songmu/peep/cmd/peep % go get github.com/Songmu/peep/cmd/peep-notify Homebrew % brew ins

    実行中のプロセスの終了を検知して通知をするpeepというのを作った | おそらくはそれさえも平凡な日々
  • fish 3.0がやってきた - Qiita

    とうとうこの時がやってきましたね。 fish 3.0がリリースされました!! すごい。いいぞ。 fish 2.0がリリースされたのが2013年とからしいので、実に5年ぶりのメジャーアップグレードとなります。 fishってなによ the friendly interactive shell です。 カスタマイズなしで高機能な補完が効くなど、とにかくユーザーに優しく便利なシェルです。 とりあえず試す 以下よりどうぞ。 GitHub: https://github.com/fish-shell/fish-shell Ubuntuであれば以下のコマンドでインストールできます。 sudo apt-add-repository ppa:fish-shell/release-3 sudo apt-get update sudo apt-get install fish 注目の変更点など waitコマンド

    fish 3.0がやってきた - Qiita
    mizdra
    mizdra 2018/12/30