bashでは記号類をたくさん使うので、この書き方は何?と思っても検索でなかなか出てこないことがあると思う。 そこで知っていると便利なコマンドを残しておく。 随時追記予定。 確認に使用したbashのバージョンは以下のとおり。
![検索ではあんまり出ないbashの便利技 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/e66e38c398384f2b63f46388d77fd89cf11960f2/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUU2JUE0JTlDJUU3JUI0JUEyJUUzJTgxJUE3JUUzJTgxJUFGJUUzJTgxJTgyJUUzJTgyJTkzJUUzJTgxJUJFJUUzJTgyJThBJUU1JTg3JUJBJUUzJTgxJUFBJUUzJTgxJTg0YmFzaCVFMyU4MSVBRSVFNCVCRSVCRiVFNSU4OCVBOSVFNiU4QSU4MCZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9OTMxYWJjMGJlZjBjZDEyOTZkMjgxZjc5MTcwNTFmMTU%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDByc29vbyZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZGI4NDVlODFjNmUwMzJiN2RjYTZlY2QzNmQ1ZGVlM2E%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D6cee5bfe8b9b81bbe4f4f30f8d087365)
概要 bashの記法は独特なものが多く毎回ググってしまうのでまとめて(と言いつつまとまりがないですが。。。)おこうと思います。 ある程度まとまってからpostしようとか思ってたらごちゃごちゃになっちゃいました。 bashで使えるという意味なのでposixシェル共通のネタも混ざってます。 随時更新します。参考になれば幸いです。 参考 man bash リファレンスマニュアル Advanced Bash-Scripting Guide カッコ色々 bashでは色々なカッコがありますが、よく違いが分からず使っていたりするのでまとめてみます。 []と[[]] []はtestコマンドのaliasです。[[]]じゃないとできないこととしては、以下のようなものがあります。 空白を含む文字列をクォートしなくてOK var='abc 123' # []の中だとクォートしないとエラーになる [ $var =
よく使うコマンドの組み合わせを関数として.bashrcに書いておく事で、色々な操作が簡単になる。筆者の.bashrcとそこに書かれた実用的な関数のサンプル、使用例。 (訳者注) 原文タイトルが「Ten tips for wonderful bash productivity」なので、10のテクニックというタイトルにしていますが、実際には9つしかありません。原文筆者に指摘したところ本人も自覚されていなかった模様?です。悪しからず。 私はいつも自分のbashの環境をいじったり直したりしています。同じような問題に何度も遭遇しては、その度に解決策を探さねばなりません。うんざりして座り込んでしまうまでそれは続きます。お前いつも座って仕事してるだろって? ええ、でももう皆さんお分かりでしょう。そういう場合は、カスタム関数を作って、それを.bashrcに書き込んで、ログインする可能性のあるマシン全部に入
シェルスクリプトの中で、スペース区切りもしくはタブ区切りのレコードを扱うことがよくあると思います。 たとえば、前回のエントリ「AWS CLIとjqを使って、AWSのELBボリュームがアタッチされているEC2インスタンス名を出力するワンライナーを書いた - 双六工場日誌」のスクリプトの出力は以下のようになります。 i-ec56a9f5 vol-07d00601 servername i-ec56a9f5 vol-8f550991 servername このようなレコードの特定の列を取り出して、処理する際にどうするのが効率的か、というのがこのエントリのお題です。 非常に古い話題なので、昔からシェルスクリプトを書いている人には自明な話ではありますが、最近、シェルの標準機能の話を聞く機会がなく、失われつつある技術になってきている気がしているので、改めて確認ということで。 例として挙げたレコードから
sshでログインしていろいろと操作をする人は、コマンドラインでTABキーを押すとコマンドやファイル名が補完されるのを知っていると思う。 TABキーでの補完は基本中の基本。コマンドラインはもっと高機能。 他にもカーソル移動、左右方向への削除、ワード単位の移動&削除、過去のコマンド検索などが可能。 CTRL-b もしくは ← 後方(左方)に1文字分移動する CTRL-f もしくは → 前方(右方)に1文字分移動する CTRL-h もしくは DEL 後方(左方)に1文字削除する CTRL-d 前方(右方)に1文字削除する CTRL-a 行の先頭に移動する CTRL-e 行の最後に移動する CTRL-k 行の最後まで削除する ESC b 後方(左方)に1ワード移動する ESC f 前方(右方)に1ワード移動する ESC DEL 後方(左方)に1ワード削除する ESC CTRL-h 後方(左方)に1
2015-01-10 <CUI><Win>窓使いでも 昨日の記事ではMacOSX向けにと限定していましたが、検索したところWindowsでも簡単にCUI環境を構築することができるようになっているようなので簡単な紹介をしたいと思います。なお、私はWindows Server 2008 (Win7系)で確認しているため表示や挙動が異なる場合もあるかもしれません。 Gow GowはUNIXコマンドをコマンドプロンプト上で利用できるようにするものです。導入は簡単で Downloads · bmatzelle/gow · GitHub 公式サイトからダウンロードしてインストールするだけで、環境変数(Path)も自動で設定され使えるようになります。 追加されたコマンドの一覧を表示させたところ。ほとんど揃っています。ここではひとつひとつ説明はしませんがインストールされるコマンドのリストは以下のURLから
※ 2014-04-26 追記並びに一部コマンド部分の修正を行いました。( > => >> に変更 ) 個人用のチラシの裏のつもりが予想以上に反響いただいていたようで非常にびっくりしております。 ちょっとしたバッチ処理的なものはさくっとシェルスクリプトでやっています。 で、ログをとっておくべくリダイレクトを噛ますわけですが、 スマートに書く方法を調べたのでメモ。 元ネタは @sechiro さんの bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する でございます。 本当に参考になりました。ありがとうございます。 今までは こんなことやってたわけです。 #!/bin/bash LOGFILE=/tmp/script-log command1 >> $LOGFILE 2>&1 command2 >> $LOGFILE 2>&1 ... >> $LOGFILE 2>&1
#!/bin/bash # 既存プロセスの標準出力と標準エラーを奪う https://qiita.com/kawaz/items/96af6fa59fdf999b94bd # ターゲットのPID pid=$1 [[ -d /proc/$1/fd ]] || exit 1 # 出力先はttyやファイルを指定 out="$2" # 出力先の指定がない場合は現在のttyを出力先にする if [[ -z $out ]]; then # プロセスに紐付いたttyを取得する https://qiita.com/kawaz/items/bd33fe1e29876939dddb function search_tty() { local pid=${1:-$$} tty="" while [[ 1 -lt $pid ]]; do [[ -d /proc/$pid/fd ]] || break tty=$(
[FAQ CENTER トップ] [redhat linux 技術ドキュメント トップ] linuxにおける bash 設定ファイル読み込みの順番 Redhat EL 6.2の場合 環境:RHEL 6.2 (run level 3) # cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.2 (Santiago) # grep :initdefault: /etc/inittab id:3:initdefault: 以下に色々なログオンによる各bashファイルの読み込み順番についてまとめました。表内の数字は読み込まれる順番を表します。×は読み込まれない事を表します。~(チルダ)はユーザのホームディレクトリを表します。user01なら/home/user01です。
参考情報:シェルスクリプトでの排他処理 概要 2重起動をbashで抑止しようとした場合、lockファイルを作成するだけだと、 不慮のプロセス停止になった場合、lockファイルが削除されずに、 手でlockファイルを削除しないと永遠に起動出来ないことになってしまう。 それではちょっと不便なので、なんとか本当に2重起動しようとしているかどうか、 pid(Process ID)も組み合わせて、判断するようにしてみた。 以下の条件を完全に満たす場合、2重起動とする。 自ファイル名.pidファイル が存在している →lockファイル方式 ファイルの1行目に書かれているプロセスが存在した場合 (/proc/ ディレクトリにpidのディレクトリが存在する) →不慮の事故(kill -9)等によりlockファイルが残っていた場合の自動リカバリ処理 自分と同じプロセス名を検索結果のpid一覧と.pidファイ
私はシェルスクリプトの大ファンで、他人のスクリプトから面白い方法を学ぶのが大好きだ。最近、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
エラーがあったらシェルスクリプトをそこで打ち止めにしてくれる(exit 0以外が返るものがあったら止まるようになる)。「あっあれここでうまくいってないからデータ準備できてないのにあれあれっもうやめて!」ってなるのを防げる。 set -u 未定義の変数を使おうとしたときに打ち止めにしてくれる。Perlでいうuse strict 'vars';的なもの。 って気軽な気持ちで書いてしまって、「ん、やたら時間かかると思ったらスペルミスうわなにをするやめ」ってなるのを防げる。 一部だけ例外にしたい はてなブックマークのコメントより -e は command1 || command2 みたいなことが出来なくなるの使うことないな。-uは付けといて良いが。 確かにおっしゃるとおりですね。コマンドの失敗を考慮して書いている部分については(もしくはやたらexit 0以外するコマンドを呼ばないといけないときなど
Revision 1.25 Paul Armstrong Too many more to mention Bash is the only shell scripting language permitted for executables. Executables must start with #!/bin/bash and a minimum number of flags. Use set to set shell options so that calling your script as bash <script_name> does not break its functionality. Restricting all executable shell scripts to bash gives us a consistent shell language that'
最新の類似投稿としてシェルスクリプトのコーディングルール2014も併せてどうぞ。 2014/10/09追記 ぼくがシェルスクリプトを書くときに気にしていること、過去の失敗で書き留めたことを忘れないために。 1. グローバル変数は大文字 PATH や HOME など、環境変数が大文字なので、エクスポートする変数を大文字で書くという習慣は一般的であるような気がしますが、エクスポートする変数を抱えるシェルスクリプトを作成する機会が稀なので。 グローバル変数は大文字 ローカル変数は小文字 エクスポートする変数も大文字 関数内からグローバル変数にアクセスする場合がありますが、やはり区別していると、可読性が増すような気がするのでお勧めです。 2. awk を知る Unix 上にて文書処理をするときに、数多くのフィルタコマンド(grep、cut、tr、head、sort、uniq、sed、awk、wc、
@hirose31 さんが「シェルスクリプトでハマった件→【募】ステキな回避方法」でお題を出されていて、それに回答してみました。 その内容はリンク先を見てもらうとして、回答の中で使ったbashのプロセス置換について書かれた記事をあまり見ないので、回答で使ったプロセス置換のことをエントリにしてみたいと思います。 最初に注意点ですが、プロセス置換の機能は、bashやzsh*1の機能でPOSIX互換の機能ではありません。そのため、使用時には、対応していないシェルでは使えませんし、bashで使う場合も /bin/sh ではなく /bin/bash を明示的に指定する必要があります。たとえば、プロセス置換を使ったスクリプト「script.sh」に対して"$ bash script.sh" というコマンドは成功しますが、"$ sh script.sh" というコマンドは失敗します。この辺りの違いは「/
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く