![メールの本文を書き換えするスクリプト](https://cdn-ak-scissors.b.st-hatena.com/image/square/4fa3a26b2b1a56594b9838333996552e86882139/height=288;version=1;width=512/https%3A%2F%2Fwiki.hgotoh.jp%2F_media%2Flogo.png)
はじめに シェルスクリプトで二重起動防止やロックをする方法を検索すると、いろいろな方法や書き方が見つかりますが、どれを使えばよいのか、本当に正しく動くのか、不安になりますよね? ディレクトリ (mkdir) やシンボリックリンク (ln) を使った独自実装の例も見かけますが、エラー発生時や予期せぬ電源断、CTRL+C で止めたときなどでも問題は発生しないのでしょうか? まず、ディレクトリやシンボリックリンクを使った独自実装はしない。これを肝に銘じてください。シェルスクリプトでのロック管理はとても難しく、一般的な排他制御の知識に加えて、シェルスクリプト特有の問題、シグナルやトラップ、サブシェルや子プロセスの問題、さらには特定のシェル固有の仕様やバグなどさまざまな問題に対処する必要があり大変です。独自実装の例では古いロックファイルが残ってしまい、それをいつどのタイミングで片付ければ安全なのか?
bash のシェルスクリプトを書くときに、いつも脳死で以下をやっている。(同僚が整備してくれたものをコピペしている) エディタなり CI で shellcheck をまわす set -euxo pipefail と冒頭に書く こんな感じ #!/bin/bash set -euxo pipefail いつまでもコピペではさすがにアレなので、意味を調べたメモ。 shellcheck koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts イケてない書き方に警告を出してくれる それぞれの警告にはエラーコード割り振られていてとても便利 エラーコードごとに正誤例、解説が書かれているのでわかりやすい SC1000 の例 CI もそうだし、エディタのプラグインも充実 しているのでとりあえず入れておくと良い set
シェルスクリプト(Bashスクリプト)で通常ファイルが存在した場合のみコマンドを実行するには、以下のように書きます。 #!/bin/bash if [[ -f ~/path/to/file ]]; then # 実行する処理、以下は例 ls -l ~/path/to/file fi通常ファイル以外の広義のファイル(ディレクトリやソケットなど)の場合は、「-f」で調べても「偽」となり、コマンドが実行されません。 ファイルタイプにかかわらず、存在すればコマンド実行する場合は「-e」を用います。 #!/bin/bash if [[ -e ~/path/to/file ]]; then # 実行する処理、以下は例 ls -l ~/path/to/file fi存在しない場合にコマンドを実行するには、以下のように書きます。 #!/bin/bash if [[ ! -e ~/path/to/file
システム・プログラム 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp> このページは、次の URL にあります。 http://www.coins.tsukuba.ac.jp/~yas/classes/syspro-2003/2003-06-23 /csh.html あるいは、次のページから手繰っていくこともできます。 http://www.coins.tsukuba.ac.jp/~yas/ http://www.is.tsukuba.ac.jp/~yas/index-j.html ◆cshスクリプトでよく使われる機能 入出力の切替え ---------------------------------------------------------------------- <file 標準入力をfileに切替える。 >file 標準出力をfileに切替える。fil
シェルスクリプトでファイルやディレクトリが存在しているかどうかを確認する方法です。 確認には「if」文を使っています。 ファイルが存在する場合 if文の演算子で「-e」を使うことでファイルが存在しているかどうかを確認することが出来ます。 if [ -e ファイル ]; then 実行するコマンド fi 「test.txt」というファイルが存在するかどうかを確認し、ファイルが存在する場合「File exists.」と表示させるスクリプトを作成しました。 #!/bin/bash FILE="test.txt" if [ -e $FILE ]; then echo "File exists." fi 動作検証用に「test.txt」ファイルを作成します。 $ touch test.txt 「check_file_1.sh」を実行すると「test.txt」は存在するので「File exists.」
Facebookで人気の投稿によくある「シェアさせてください」というコメント。丁寧に一言断りを入れる日本人らしい文化ではありますが、「いちいち言わなくてもいい」「多すぎて不快になる」といった意見もネット上では多く見かけます。そんな人たちのためのスクリプト「シェアよさらば」が公開されました。 シェアよさらば シェアよさらば 「シェアよさらば」はリンクをお気に入りなどに入れておき、シェアにおさらばしたいページを見ているときにクリックするだけで動作するブックマークレット(つまり、Facebook以外のページでも使えます)。シェアを一掃する方法はシンプルで、クリックするとそのページの「シェア」を「愛撫」に置き換えるというものです。大量の「シェアさせてください」が目障りなコメント欄で使用すると「愛撫させてください」「愛撫させていただきました」「感動しました! 愛撫させていただきます」など、ものすごい
Bash は言わずと知れた歴史あるコマンド言語です。テキストにコマンドの羅列を記述するだけで、手軽にシェルスクリプトとして実行することができます。 シェルスクリプトの実体はシェルコマンドの羅列に過ぎませんが、手続き型プログラミング言語にあるような制御構文も備えています。変数や条件分岐、ループ、関数などです。これらを使えばシェルスクリプトでプログラミングも可能です。 もちろん、現代の一般的なプログラミング言語と比べると機能は限られます。他の言語には見られないシェルスクリプト特有の癖や記法も数多くあり、最近の言語に慣れている人ほど、つまずくポイントが多いです。 しかし、シェルスクリプトだからこその良さもあります。Bash は現在でも多くの OS で標準シェルとして採用されており、普段使っているシェルコマンドを書くだけで動かせる手軽さは何者にも代えがたいです。一度身につけておくと長く使えるお得な
Windowsのインストーラーではたいていプログレスバーが表示され進捗度がわかるようになっています。またノーツでもデータベースの複製の際にはプログレスバーが表示されますね。プログレスバーというとどうしても無いと困るという類のものではありませんが時間がかかる処理の場合、いったいその処理は止まっているのか?進んでいるのか?速いのか?遅いのか?ユーザーに対し状況を視覚化することは「不要なトラブルを避ける」「貧乏ゆすりが減る」「見てるだけで暇つぶしになる」かもしれない等のメリットがあると考えられます。 それではノーツでプログレスバーを使うにはどうしたらいいのでしょうか。デザイナーヘルプを見てもプログレスバーに関係しそうな記述は見当たりません。調べ進んでみると海外のサイトでそれらしいスクリプトを見つけました。ノーツのC-APIを使えば実現できるようです。 MartinScott.com Code L
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く