タグ

Tipsとbashに関するAmaiSaetaのブックマーク (23)

  • 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カクテル
  • getoptsを関数(function)の中で使う - Qiita

    基数変換について調べた https://qiita.com/macoril/items/77ba050cad17f03ed46a ついでに基数変換用のエイリアスを設定しようとして詰まった。 TL;DR functionの中でgetoptsを使いたいときは OPTやOPTINDなどの変数をlocalで宣言しないといけない 詳細 # copy to your bash_profile or somewhere you write aliases, # then you can convert a number to different base by cbase # エイリアスを設定しているあたりにでも以下のコードをコピペすると基数変換がcbaseコマンドで簡単できるようになります function cbase() { function echo_usage() { cat << USAGE

    getoptsを関数(function)の中で使う - Qiita
  • sudoコマンドでaliasを使えるようにする - Qiita

    目的 Linuxでroot権限でコマンドを実行したいとき、わざわざrootユーザに変更するのではなく、sudoコマンドを使用することが多いと思います。しかし、通常のsudoコマンドでは、あとに続くコマンドがaliasかどうかチェックされないので、設定したaliasは使用できません。なので、sudoコマンドでもaliasを使用できるようにする設定をご紹介します。 方法 sudosudo+半角スペースのaliasとして設定します。 そのために、自身がaliasを設定しているファイルにalias sudo='sudo 'を追加してください。または、コマンドライン上で実行してください。 このように設定することで、sudoコマンドでもaliasが使用できるようになります。 仕組み sudoのあとに半角スペースを入れることによって何が起こるかといいますと、bashのマニュアルには以下のように説明され

    sudoコマンドでaliasを使えるようにする - Qiita
  • bash で標準出力と標準エラーを 2つのコマンドに出し分ける | Aqua Ware つぶやきブログ

    要は、 引数部分でファイルを指定するべき場所で、コマンドの標準入出力を代用できる機能ということか。 例えば、 "cat <(ls ./a) <(ls ./b)" とすれば、 "ls ./a" の内容と "ls ./b" の内容が連結されて出力されるし、 "command0 | tee >(command1) | command2" とすれば、 command0 の標準出力が、 command1 の標準入力と、 command2 の標準入力両方に渡される。 また、「ファイルの読み書きの代替」となるため、 "command0 2> >(command1)" のようにリダイレクト先のファイル名の替わりにプロセス置換を使えば、標準エラーだけを command1 の標準入力に渡すことができる。 ちょっとその尖った使い所を考えてみる。 例えばこんな、標準出力と標準エラーを吐き出すスクリプトがあったとし

  • Bashの配列でjoinやsplitする - Qiita

    ※ここに書いた僕のコードはBashの基ルールを確認しながら構築した手法って感じですが、コメントでは別の良いやり方が紹介されてるのでそちらも要チェックです! ※この記事の手法は、区切り文字が1文字のみが対象です。2文字以上の区切り文字でjoin/splitをしたい場合はこの記事の手法は使えないので他の方法を頑張ってください。

    Bashの配列でjoinやsplitする - Qiita
  • rakugakibox.net

    AmaiSaeta
    AmaiSaeta 2020/07/02
    `$"~"` → l10nの仕組み。関連: `TEXTDOMAIN` `TEXTDOMAINDIR` 環境変数 | `$'~'` → クォート中でエスケープが有効になる。 `echo $'\n' '\n'` みたいな時に便利か。
  • 【シェル芸人への道】Bashの変数展開と真摯に向き合う - Qiita

    はじめに 個人的なシェル(スクリプト)あるあるなんですが、変数操作に悩んでいるとBashの 変数展開 って思った以上に色んなことができてしまうことに気がつきます。 「なんかいい感じの書き方ないかなー」 「cut, tr, sed, awk, ...、まぁできるのは間違いないんだけど」 「うーん」ググリ― (10分後) 「えっ、変数展開...?(怪訝)」ポチポチ 「...」カタカタ 「いけるやん!!!」 ってことが結構あります。皆さんもこういった経験少なからずあるのではないでしょうか。 (そして今もまさにそういう記憶・期待があるから、変数展開について少し調べている...そんなところかと推察します) 毎回調べるのも感動があっていいと思うんですが、もはや衝動を押さえきれないので 全部調べたい と思います。 Bashのバージョンは 4.3.48(1) でしたが、そうそう変わるような内容でも

    【シェル芸人への道】Bashの変数展開と真摯に向き合う - Qiita
  • 最後の文字が改行かどうか調べる

  • Bash カラープロンプト - ArchWiki

    オペレーティングシステムは、コンピュータのハードウェア管理、ファイル管理、データの入出力と管理、アプリケーションプログラムやユーティリティの実行、ユーザーとの対話などを効率的に行うための制御・処理プログラムの基セットです。

    Bash カラープロンプト - ArchWiki
  • zshでcommand not foundという冷やかなメッセージを暖かくする - Qiita

    いつもの通り そんなコマンドないよ と冷たくあしらわれてしまいました。 コマンドを間違った時に嫌な気持ちにならないように zsh にはもっと暖かいメッセージを言ってもらいましょう。 command_not_found_handler zsh には command_not_found_handler という特別な関数があります。この関数は、存在しないコマンドを呼びだそうとした時に呼ばれます。 ~/.zshrc に以下のように定義してみます。

    zshでcommand not foundという冷やかなメッセージを暖かくする - Qiita
    AmaiSaeta
    AmaiSaeta 2017/03/20
    `command_not_found_handler`
  • bashのそれって実はこういう書き方できるよ一覧 - Qiita

    bashで普段こう書いているけど、実はこういう書き方もあるんですよというのをまとめてみました。 ->の右側がmanに載ってるテク名です。 例えばどういったものが書けるかはガチャガチャした前回の記事で…。 `command` -> Command Substitution 書く量は増えるけど、視認性が良い(ネストした時が特に)。 尚、これは書き方が違うだけでどっちもCommand Substitutionです。

    bashのそれって実はこういう書き方できるよ一覧 - Qiita
    AmaiSaeta
    AmaiSaeta 2017/03/18
    便利だろうが……記号的すぎて確実に次に使うタイミングまで憶えてられない……
  • 初心者向け、「上手い」シェルスクリプトの書き方メモ - Qiita

    ここ最近、沢山シェルスクリプトを書くようになりました。 元々あまりシェルスクリプトを書いたこと無かったので、色々と勉強しつつ書いてるのですが、 他のプログラミング言語とはちょっと違って独特なクセというか、発見の度におぉー!ってなることが沢山あって楽しいです。 そんなわけで、最近学んだり参考にした中で特に感動したシェルの上手い書き方をまとめてみます。 きっとまだ知らないこととかもっと上手くやる方法なんかが沢山見つかりそうなので、 もっといいやり方あるよ!って方はコメントください 何もしない : (コロン)コマンド シェルを書いていた時に非常に欲しかったコマンドがこれ!何もしない! : というコマンド(?)を利用すると、何もせずに終了ステータス0(つまり正常終了)を返します。 これが様々な事に使える万能コマンドで、これによって面倒なエラー処理を簡潔にできたり、 入力や出力のリダイレクト元/先と

    初心者向け、「上手い」シェルスクリプトの書き方メモ - Qiita
  • シェルの入出力制御あれこれ

    シェルスクリプトはあまり触らないから忘れちゃうのでメモっとく。 主にパイプとかリダイレクトとかプロセス置換とか。 パイプ コマンドの出力を別のコマンドの入力にする

    シェルの入出力制御あれこれ
  • 対話モードか否か? - 日々之迷歩

    10月末に行われた第19回シェル芸勉強会の問題をふと思い出すことがありました。 最初の問題が、端末で実行した場合とシェルスクリプトに書いて実行した場合で動きを変える、という内容でした。出題者上田さんの解答例では、aliasが効くかどうかで判定していました。 問題と解答は、出題者上田さんが公開されているページQ1をご覧ください。 b.ueda.tech この問題の意味は、シェルの状態が対話(インタラクティブ)モードかどうか?の判定をどうするかということだと思います。 ところでFreeBSDのデフォルトログインシェルはtcshです。FreeBSDのサーバで作業をしていた時に、ふとシェルの設定ファイルを確認してみました。デフォルトで提供される設定ファイルが下記のようになっています。 > tail -n +24 .cshrc if ($?prompt) then【←シェル変数promptが定義され

    対話モードか否か? - 日々之迷歩
    AmaiSaeta
    AmaiSaeta 2015/12/09
    プロンプト設定用変数であるpromptやPS1が在るかどうかで判別。
  • Bashでコマンドの存在チェックはwhichよりhashの方が良いかも→いやtypeが最強→command -vも - Qiita

    コマンドのパスを知りたいんじゃなく、コマンドの存在をチェックしたいだけならwhichよりhashを使ったほうが良いかもっていう話。→追記: typeが最強っぽい。 追記: command -vも良い。プログラムの存在チェックorパスを探したいだけなら互換性を考えると一番良いかも。 比較してみる whichよりhashよりtype=command -vが高速→typeまたはcommand -vの勝ち whichは実ファイルという実体があるプログラムです。hashとtypeはbashの組み込みコマンドです。なので当然ですがプログラムの起動コストがない分hashやtypeの方が速いです。 $ time bash -c 'for((i=0;i<10000;i++));do which perl; done >/dev/null' real 0m7.739s user 0m2.928s sys 0m

    Bashでコマンドの存在チェックはwhichよりhashの方が良いかも→いやtypeが最強→command -vも - Qiita
  • シェルスクリプトを書くときはset -euしておく - Qiita

    エラーがあったらシェルスクリプトをそこで打ち止めにしてくれる(exit 0以外が返るものがあったら止まるようになる)。「あっあれここでうまくいってないからデータ準備できてないのにあれあれっもうやめて!」ってなるのを防げる。 set -u 未定義の変数を使おうとしたときに打ち止めにしてくれる。Perlでいうuse strict 'vars';的なもの。 って気軽な気持ちで書いてしまって、「ん、やたら時間かかると思ったらスペルミスうわなにをするやめ」ってなるのを防げる。 一部だけ例外にしたい はてなブックマークのコメントより -e は command1 || command2 みたいなことが出来なくなるの使うことないな。-uは付けといて良いが。 確かにおっしゃるとおりですね。コマンドの失敗を考慮して書いている部分については(もしくはやたらexit 0以外するコマンドを呼ばないといけないときなど

    シェルスクリプトを書くときはset -euしておく - Qiita
  • 私が他人のシェルスクリプトから学んだこと | Yakst

    私はシェルスクリプトの大ファンで、他人のスクリプトから面白い方法を学ぶのが大好きだ。最近、SSHサーバの2要素認証を簡単にするためのauthy-sshスクリプトに出会った。このスクリプト群を見まわしていて、みんなと共有したいたくさんのクールなことを見つけた。 出力に色付けする 出力文字列を、成功した時は緑に、失敗した時は赤に、警告は黄色に色づけしたいと思うことはたくさんあるだろう。 NORMAL=$(tput sgr0) GREEN=$(tput setaf 2; tput bold) YELLOW=$(tput setaf 3) RED=$(tput setaf 1) function red() { echo -e "$RED$*$NORMAL" } function green() { echo -e "$GREEN$*$NORMAL" } function yellow() { e

    私が他人のシェルスクリプトから学んだこと | Yakst
  • bashによるシェルスクリプトの小技(2) - shibainu55日記

    前回(bashによるシェルスクリプトの小技(1))に引き続き、シェルによって自動的に値が設定される特殊な変数について紹介する。特殊な変数を参照することにより、様々な情報を取得することができる(ただし、これらの変数には自分で任意の値を設定することはできない)。 さて、まずは特殊変数を一覧でまとめてみる。お馴染みのものが多いが、最後の2つ(特に最後のPIPESTATUS)についてはきっと今まで知らなかった人もいるんじゃないだろうか。シェルの中でパイプすると途中のコマンドのリターンコード、拾えないとか思っていませんか?今回のポイントとしては、「1. PIPESTATUS変数について」と「2. 特殊変数 $@と$*の違いについて」の2点を主に説明する。 特殊変数一覧表 変数名 自動的に設定される値 $? 直前に実行されたコマンドの終了ステータスが設定される変数。正常終了の場合は「0」、異常終了の場

    bashによるシェルスクリプトの小技(2) - shibainu55日記
  • bashによるシェルスクリプトの小技(1) - shibainu55日記

    今回から何度かに分けてシェルスクリプト(主にbash)の小技を紹介する予定です。まずは第一弾として、変数の特殊な参照方法を紹介。 変数の特殊参照方法 変数の状態に応じて振る舞いを変える特殊な参照方法。変数に値が設定されていない場合に一時的に値を与えて参照する、などの特殊な参照が可能。知っているとなかなか便利な機能ではあるが、これらをむやみに使用するとシェルスクリプトの可読性が低下し、思わぬバグを生む可能性があるので、あまり多用はしないほうがよさそう。 参照方法 参照結果 ${VAR=aaa} 変数 VAR が未使用の場合に限り、変数VARへ文字列「aaa」を代入し文字列「aaa」を返す。変数VARがNULL値を含み既に使用されている場合は、変数 VAR への代入を行わず、変数 VAR の値を返す。 ${VAR:=aaa} 変数 VAR が未使用もしくは NULL の場合に限り、変数 VAR

    bashによるシェルスクリプトの小技(1) - shibainu55日記
  • シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Java BlockingQueueで遊ぶ:パイプラインごっこ」でパイプラインの話をしたので、来の、つまりUnixのパイプやリダイレクトを少し調べてみました。 たまに話題となる some-command >file 2>&1 と some-command 2>&1 >fileの挙動の違いについて、「シェルはコマンドラインリダイレクトの指定を右から左に解釈実行する」なんて説明が見つかりました。んなバカな! パージングは左から右にするものですよ。パーズツリーを逆順にたどることはできるけど、そんなことする必然性はなんにもないよ。 次の記事を読むと、「右から左」なんて事情じゃないことが分かるでしょう。 UNIXの部屋 検索: リダイレクト シェルのリダイレクトにまつわる失敗 さてここでは、複雑なリダイレクト処理も完全に理解できる処方箋を示しましょう。例えば、次のコマンドラインが何をするか分かる

    シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)
    AmaiSaeta
    AmaiSaeta 2007/12/22
    あー、なるほど。パイプってなんとなくどんどん繋いでいくというイメージがあるから駄目なのか。