Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
Shell Script Advent Calendar 2015 4日目 の投稿です。 以前から自分用にメモしていたものを文字起こししました。 はじめに 仕事でシェルを使い始めて3年くらい経ちました。 途中、python や ruby でスクリプト作ったり、ちょっと zsh に浮気したりしましたが、なんだかんだで今も Bash を使うことが多いです。 この3年間、スーパーシェル芸人(@ebanさん)にご教授頂いたり、Golfしたり(@ebanの影響)、シェル芸勉強会に参加したり(@ebanの影響)してきました。 そんな3年間のまとめとして、シェルスクリプト初めましてだった3年前の私に向けたTips集を書いてみました。 趣旨 各項目ごとに、まず初心者(過去の私がやってた)あるある実装を例示して、その次に、より良さげな実装を例示する構成としています。 実行環境 OS Mac OS X Yos
原文は2015年8月22日時点のものを利用しており、それ以降に追記、更新されている可能性があります。 本翻訳は原作者の許可を得て公開されています。 Thanks for GreyCat! このページはBashプログラマーが陥りがちなよくあるエラーについてまとめました。以下の例は全てなんらかの欠陥があります。 クオートをいつも使い、どんな理由があっても単語分割を使わなければ、多くの落とし穴からあなた自身を守ることができます!単語分割はクオート表現をしない場合にはデフォルトでオンになっている、Bourneシェルから継承された壊れたレガシーな設計ミスです。落とし穴の大半はクオートされていない展開になんらか関連し、単語分割しその結果をグロブします。 1. for i in $(ls *.mp3) BASHプログラマーたちがループを書く際にもっとも犯しがちなよくあるミスは以下のような感じです。: f
いろいろ混同されがちなやつ。筆者もまったく混乱してないとは主張しがたい。 この記事は初版を2014年1月に書きはじめ、いまのバージョンを2015年4月頃に書いてたけど、擬似端末/仮想コンソールあたりの理解が怪しいのでお蔵入りになってました。ので、そのあたりの説明は微妙。 コマンドライン(command-line) 文字でコマンドを打ち込んで操作するインターフェイスのこと。 シェル(shell) 人間様がOSを操作するためのインターフェイスのこと。貝のようにOSの核(カーネル)を守ってるからシェルと呼ぶんだって噂。 大別すると コマンドラインシェル と グラフィカルシェル がある。 Unixシェル UNIXやUNIX-likeなOSで利用されるコマンドラインシェル。現代ではGNU BashやZ Shellなどが知られる。 Shellにもいくつかの系統があるが、主にBシェル(Bourne Sh
uniqコマンドは、Linux/UNIXで使用される、重複した行を圧縮して出力してくれるコマンドだ。 今回は、このコマンドについて覚えておきたい使い方についてを紹介する。 1.基本的な使い方 基本的には、以下のように使用することで標準出力の内容から重複行を圧縮して表示させることが出来る。 [root@test-centos7 ~]# cat /test/test3.txt aaaaa aaaaa aaaaa bbbbb bbbbb bbbbb bbbbb bbbbb ccccc ccccc [root@test-centos7 ~]# cat /test/test3.txt | uniq aaaaa bbbbb ccccc この時注意したいのが、「連続していない行」の場合は圧縮しないという点だ。 たとえば、以下のような状態でuniqコマンドを実行しても、重複した行は残ってしまう。 [roo
import sys, commands from percol.command import SelectorCommand from percol.key import SPECIAL_KEYS from percol.finder import FinderMultiQueryMigemo, FinderMultiQueryRegex ## prompt # Case Insensitive / Match Method に応じてプロンプトに表示 def dynamic_prompt(): prompt = ur"" if percol.model.finder.__class__ == FinderMultiQueryMigemo: prompt += "[Migemo]" elif percol.model.finder.__class__ == FinderMultiQuery
あなおそろしや、「rm -rf /」。 猫×UNIXコマンド、その名も「CUI(Cat User Interface)」。本日はそんなLINEスタンプをご紹介。私も含め、猫ジャーナル読者の皆さまには、UNIXコマンドと言っても何が何やら、という方も多いかと思いますので、コマンドの意味とスタンプの使い所を解説しながら話を進めて参りましょう。 冒頭の「rm -rf /」は、「警告無しに、すべてのファイルを削除する」。猫がシャーと言っているのも納得です。これ以上近寄ると、全部、消すぞ!といったシチュエーション。例えば、バルスと叫ばざるを得ないときなどに、効果的にご活用いただけます。「3分間待ってやる」といったセリフが出たら、40秒で支度して、このスタンプであります。 「chmod」は「パーミッション(アクセス権/所有権)変更」するときに使います。「ボールはこっちにきたぞ、テヘペロ」とか、「こちら
目的 "getopt"は、Cライブラリもコマンド版も、どちらも使い方を覚えにくい。 ここでは、コマンド版 "getopt" と、sh/bash built-in の "getopts" の使い方をまとめる。 結果 sh/bash built-inのgetoptsが使える場合は、そちらを使った方が良い。 外部コマンド getopt 使用時は、クォート処理に気をつける。 速度的には、getoptとgetoptsどっちでも大して差はない。 getopts.sh https://sssvn.jp/svn/spikelet/sh/getopts.sh getopt-o.sh https://sssvn.jp/svn/spikelet/sh/getopt-o.sh 以下、詳細。 getopt を使う(クォート考慮なし) getopt(1)を参考にしつつ、素直に作成。 getopt.sh https:/
「#!」[1]や「ハッシュバン」はこの項目へ転送されています。URLに使われるものについては「URIフラグメント#hash-bang(英語版)」をご覧ください。 シバンまたはシェバン (英: shebang) とはスクリプトの#!から始まる1行目のこと。起動してスクリプトを読み込むインタプリタを指定する。 シェバンやシバンと呼ばれるようになった理由については諸説あるが、一般的には、そこに書かれる2文字が「#」(ハッシュ、番号記号)と「!」(bang! バン (びっくりマーク)だから、ハッシュ・バン(hash bang)やシャープ・バン(sharp bang)と呼ばれるようになり、それを短く言う際に訛ってシェバンとなった、と説明されている。あるいは、もはもともとは主にシェルを起動していたからシェル・バン(shell bang)と呼ばれ、それが訛ったと説明されることもある。いずれにせよ現在では
引数で複数のロングオプションを指定したい時のgetoptの指定の仕方がよくわからなかったので、 調べたり実験したりしてみた結果↓で出来るようになりました。 実行コマンド batch/sample.sh --target=maker --env=stage コード OPT=`getopt -o "" -l target: -l env: -- "$@"` if [ "$?" -ne 0 ]; then error "Usage: $0 [--target VALUE] [--env VALUE]" fi eval set -- "$OPT" until [ "$1" == "--" ]; do echo $1 case $1 in --target) target=$2 ;; --env) env=$2 ;; esac shift done echolog log "target is :
ASCII Booksのサイトをご利用いただき、ありがとうございます。 2016年12月6日をもちまして、サイトを閉鎖させていただくことになりました。 今までサイトをご利用いただき、ありがとうございました。 アスキー・メディアワークスを引き続き、よろしくお願いいたします。
Ruby でシェルのようなものを作ってみると、Ruby とシェルやシステムコールの理解ができて、研修の課題とかにいいんじゃないかと10年くらい前に思ってたのを、ふと思い出したので書いてみます。 基本 シェルの動作を簡単に説明すると次のような感じです。 プロンプトを出力 標準入力からコマンドラインを読み込む 読み込んだコマンドを実行する コマンドの終了を待つ 1 に戻る これをそのまま Ruby で書いてみます。 while true print '-> ' # プロンプト表示 cmd = gets or break # コマンド入力 cmd.chomp! # 末尾の改行削除 pid = Process.fork do # 子プロセス生成 Process.exec [cmd, cmd] # コマンド実行 end Process.waitall # 子プロセスの終了待ち end Process
最新の類似投稿としてシェルスクリプトのコーディングルール2014も併せてどうぞ。 2014/10/09追記 ぼくがシェルスクリプトを書くときに気にしていること、過去の失敗で書き留めたことを忘れないために。 1. グローバル変数は大文字 PATH や HOME など、環境変数が大文字なので、エクスポートする変数を大文字で書くという習慣は一般的であるような気がしますが、エクスポートする変数を抱えるシェルスクリプトを作成する機会が稀なので。 グローバル変数は大文字 ローカル変数は小文字 エクスポートする変数も大文字 関数内からグローバル変数にアクセスする場合がありますが、やはり区別していると、可読性が増すような気がするのでお勧めです。 2. awk を知る Unix 上にて文書処理をするときに、数多くのフィルタコマンド(grep、cut、tr、head、sort、uniq、sed、awk、wc、
Glamenv-Septzen(ぐらめぬ・ぜぷつぇん)(archive) 技術/UNIX/なぜnohupをバックグランドジョブとして起動するのが定番なのか?(擬似端末, Pseudo Terminal, SIGHUP他) [ Prev ] [ Next ] [ 技術 ] 何をいまさら当たり前の事を・・・と思われるだろう。 $ nohup long_run_batch.sh & SSHからログアウト後も実行を続けたいバッチジョブを、"&"を付けてバックグラウンドジョブとしてnohupから起動するのは定番中の定番である。 しかし、「nohupを使わなくても実行を続けることが出来る」やり方があったり、さらには「nohupを付けてもログアウト時に終了してしまう」パターンがあるとしたらどうだろう? そして、ある日あなたの後輩や同僚がこれらについてあなたに質問してきたら、あなたはどう答えるだろうか?
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く