Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに シェルスクリプトで二重起動防止やロックをする方法を検索すると、いろいろな方法や書き方が見つかりますが、どれを使えばよいのか、本当に正しく動くのか、不安になりますよね? ディレクトリ (mkdir) やシンボリックリンク (ln) を使った独自実装の例も見かけますが、エラー発生時や予期せぬ電源断、CTRL+C で止めたときなどでも問題は発生しないのでしょうか? まず、ディレクトリやシンボリックリンクを使った独自実装はしない。これを肝に銘じてください。シェルスクリプトでのロック管理はとても難しく、一般的な排他制御の知識に加えて、シ

はじめにGoogleさんがShellスタイルガイドを共有していたので、いくつか気になった点をピックアップしました。 自分のShellスタイルはかなり我流なので、自省の意味も込めてコメントも併記します。Googleスタイルガイドの元ネタ (Python/C++/Java/Rとかだけでなくdocumentガイドなど色々あります) https://github.com/google/styleguide Shellスタイルガイド (今回はこちら) http://google.github.io/styleguide/shell.xml本当は人間がチェックするのではなくcpplintのためXML定義なのかもですが、気にしない気にしない。 (見たところcpplintはc++だけだと思ってます) commitフックでshell系のlint走らせろっていうのが今風なのかもしれませんが、キニシナイキ

自分用にメモしておく コマンド実行 CMD1; CMD2, CMD1 && CMD2 ;はCMD1の結果に関わらずCMD2も実行される &&はCMD1の結果が正常な場合のみCMD2が実行される CMD1 || CMD2 - 失敗時に後続コマンドを実行する CMD || printf "%b" "MSG"でエラーメッセージを表示する エラーメッセージ表示後exit 1したい場合 = CMD || { printf "%b" "FAILED.\n" ; exit 1 } CMD || printf "%b" "FAILED.\n" ; exit 1と波括弧無しで書くと期待通り動作しない(CMDが成功時もexit 1してしまう) CMD & - バックグラウンド実行 CMD &で[1] 4592のようにジョブ番号とプロセスIDが表示される killしたければkill %ジョブ番号 か kill

※ 2014-04-26 追記並びに一部コマンド部分の修正を行いました。( > => >> に変更 ) 個人用のチラシの裏のつもりが予想以上に反響いただいていたようで非常にびっくりしております。 ちょっとしたバッチ処理的なものはさくっとシェルスクリプトでやっています。 で、ログをとっておくべくリダイレクトを噛ますわけですが、 スマートに書く方法を調べたのでメモ。 元ネタは @sechiro さんの bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する でございます。本当に参考になりました。ありがとうございます。 今までは こんなことやってたわけです。 #!/bin/bashLOGFILE=/tmp/script-log command1 >> $LOGFILE 2>&1 command2 >> $LOGFILE 2>&1 ... >> $LOGFILE 2>&1
@hirose31 さんが「シェルスクリプトでハマった件→【募】ステキな回避方法」でお題を出されていて、それに回答してみました。 その内容はリンク先を見てもらうとして、回答の中で使ったbashのプロセス置換について書かれた記事をあまり見ないので、回答で使ったプロセス置換のことをエントリにしてみたいと思います。 最初に注意点ですが、プロセス置換の機能は、bashやzsh*1の機能でPOSIX互換の機能ではありません。そのため、使用時には、対応していないシェルでは使えませんし、bashで使う場合も /bin/sh ではなく /bin/bash を明示的に指定する必要があります。たとえば、プロセス置換を使ったスクリプト「script.sh」に対して"$ bash script.sh" というコマンドは成功しますが、"$ sh script.sh" というコマンドは失敗します。この辺りの違いは「/
さて、ひとつ前のエントリは釣りだったわけですが、本題の bash 補完を初めてやってみました。ちょっとした物だったら割と簡単に書けたので、共有。 目標 自作コマンド(仮にsugyanとします)はこんな感じの I/F だとします。 sugyan subcommand [args] いくつかの subcommand は次にくる引数が限られる 例えばsugyan momocloの後にはkanako renichan shiorin ahrin momoka sugyan listでそういう補完の一覧が色々出せる sugyan list commandで subcommand の一覧 sugyan list momocloでももクロ一覧 一応sugyan listでcommand momocloが返る あとはいつもの bash のままにファイルとかを補完して欲しい 実際叩くと、 $ sugyan

エンジニアという職業柄かシェルスクリプトを書くことはちょくちょくあるのですが、自分なりに気を付けていることを備忘録&自分への戒めも含めて、簡単に書いてみたいと思います。 変数は大文字 シェルスクリプト書いていれば変数の出番は至るところであるでしょう。その際、可読性を増すように、変数は大文字を使っています。 RET=`cmd1`みたいに。好みの問題もあるでしょうが、分かりやすいので。 クオテーションは選ぶ クオテーションにはシングルだったり、ダブルだったり色々ありますが、使い分けておいたほうがよいでしょう。 変数の展開がないようであれば、シングルクオーテーションのほうがスマートでしょうし、展開があるのならダブルクオーテーションを使えばと。 ダブルクオーテーションを使うのにも意味があって、変数は「$RET」のようにクオテーションで囲まなくても動作はたいていするのですが、 echo "${RET

日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。
Emacs 上で快適に Bash や Zsh を利用する設定¶ published: 2011-01-23created: 2010-03-21 概要¶Emacs を利用していると全部Emacs でやりたくなるのはEmacs 使いとして当然だと思います。 Shell だってTerminal など利用せずEmacs 上で動作させたくなることでしょう。 この文書ではEmacs 上で Shell を快適に利用するための設定を記述していきます。 検証環境¶ この文章は主に以下の環境でテストした結果を記述しています。Emacs GNUEmacs22.3 GNUEmacs23.1 OSWindows XP SP3Mac OS X 10.6.2 以上Mac OS X 10.5.8(Intel,PPC) Shell Bash 3.2.48 Zsh 4.3.10 Package M
bashでは、"Ctrl"や"Esc"キーと組み合わせることで様々な操作ができるので、メモ代わりにまとめておきます。 よくやるのが「Ctrl + s」キーを押してしまうと、フリーズしたかのように見えるので一瞬焦ってしまう。そんな時は・・・ Ctrl + b カーソルを左へ1文字移動 (←キーでもOK) Ctrl + f カーソルを右へ1文字移動 (→キーでもOK) Esc + b カーソルを右へ1単語移動 Esc + f カーソルを右へ1単語移動 Ctrl + p historyの1つ前に入力したコマンドを表示 (↑キーでもOK) Ctrl + n historyの1つ後に入力したコマンドを表示 (↓キーでもOK) Ctrl + h カーソルの左1文字を削除 (BackspaceキーでもOK) Ctrl + d カーソルの右1文字を削除 (DeleteキーでもOK) Ctrl + a カー

1リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く