タグ

シェルスクリプトに関するakaneharaのブックマーク (81)

  • watchコマンドの代わりになるシェルスクリプト - Okiraku Programming

    Linuxにはwatchコマンドというのがある。一定時間ごとに引数のコマンドを実行して、出力を監視することができるコマンドで、例えば、 % watch cat /proc/meminfoなどとすれば、メモリの使用状況を監視することができる。 Mac OS X環境でも同じことをするコマンドが欲しかったので、シェルスクリプトで作ってみた。 -nオプションで、周期を指定する。0.5などと、小数でもOK。 #!/bin/zsh wait=2 clear="\033[H\033[J" while getopts n: o; do case $o in n) wait=$OPTARG;; [?]) print >&2 "Usage: $0 [-n wait] command ..." ; exit 1;; esac done shift $OPTIND-1 while ( true ); do let

    watchコマンドの代わりになるシェルスクリプト - Okiraku Programming
  • rbenvの切り替えの仕組み…と、他言語での実験 - すぎゃーんメモ

    rbenvを使ってみる - すぎゃーんメモの続き。 現時点でのrbenvのバージョンは0.2.1。 rbenvを使っていると.rbenv-versionファイルの有無でrubyコマンド打ったときに実行されるrubyが違うものになる、というのがちょっと新鮮で、これはどういう仕組みで動いているのだろう?と思って少し調べてみた。 上記記事のようにrbenvの設定をした環境では、 $ which ruby /Users/sugyan/.rbenv/shims/rubyとなり、${RBENV_ROOT}/shims以下のrubyを指すことになる。ここへのPATHは$HOME/.rbenv/libexec/rbenv-initに echo 'export PATH="'${RBENV_ROOT}'/shims:${PATH}"' と書かれているので、eval "$(rbenv init -)"してあれ

    rbenvの切り替えの仕組み…と、他言語での実験 - すぎゃーんメモ
  • SoftwareDesign2018年1月号「使えるシェルスクリプトの書き方」特集が面白かった件 | DevelopersIO

    AWSを日常的に触っていると、シェルスクリプトを書く機会が山のようにあります。あるんだけれど、どうにも考え方が特殊というか、他の一般的なプログラミング言語とは扱い方が違うというか、使いこなせて無い感を強く持ってました。 そんな折、SoftwareDesign2018年1月号でシェルスクリプト特集があったので、渡りに船とばかり購入して読んでみたところ、むっちゃええ感じの特集だったのでここに紹介いたします。 普段からシェルスクリプト書いているんだけれど、「これで良いんかなぁ」というモヤモヤ感をお持ちの方には有用なヒントが満載の特集だと思いますYO __ (祭) ∧ ∧ Y  ( ゚Д゚) Φ[_ソ__y_l〉     シェルスクリプトダワッショイ |_|_| し'´J 以下、コマンド例は、bashを前提としています。 第1章「使えるシェルスクリプトにするために」 最初の章では、「使えるシェ

    SoftwareDesign2018年1月号「使えるシェルスクリプトの書き方」特集が面白かった件 | DevelopersIO
  • シェルスクリプトの set -e は罠いっぱい

    ふみやす@シェルまおう(自称でない) FGO:838,149,789 @satoh_fumiyasu Perl では最初に use strict; use warnings すべきなように、シェルでは set -u すべき。「例外処理って何? おいしいの?」って人は set -e もしておけ。 2012-06-25 18:25:20 ふみやす@シェルまおう(自称でない) FGO:838,149,789 @satoh_fumiyasu シェルスクリプトをまともに書けない奴は、それでも書かなければならないときは、とりあえず変数展開するとき必ずダブルクォートで括れよ。$foo じゃなくて "$foo” な。あと最初に set -u; set -e でもしておきな。シェルスクリプトが駄目なんじゃなくて、書けないだけ。 2012-12-22 00:27:38

    シェルスクリプトの set -e は罠いっぱい
  • #/usr/binとその同種の周辺を探る | POSTD

    (注:2017/04/10、いただいたフィードバックを元に翻訳を修正いたしました。) はじめに 私はLinuxが大好きです。コンピュータとのやりとりが楽しくなるし学ぶことも多くなります。OSとハードウェアの基盤となる基原則を学びたい人にとって、Linuxはとてもいい出発点と言えるでしょう。 ご存じのとおりLinuxとは大抵の場合プログラム(コマンド)を通してやりとりします。Linuxと他のUNIX系システムが持っている特徴は、コマンドラインと、パイプのコンセプトです。プログラムの提供する入力と出力を統合すれば、データを操作するのに非常にパワフルなプラットフォームになります。 Linuxのコマンド、プログラム、バイナリ(何と呼んでもいいのですが)の大部分は、/usr/bin、/usr/sbin/、/binそして/usr/local/binに存在しています。これらのディレクトリを見れば、プロ

    #/usr/binとその同種の周辺を探る | POSTD
  • bashのpipefailで確実にスクリプトを止める – 上田ブログ

    シェルプログラミング実用テクニック、出版される前からもう補足ですが、私めがbashのpipefailというオプションをすっかり見落としていたのでフォローしておきます。 カンニング先: パイプの途中のエラーを取る | 揮発性のメモ 文ではbashに-e(エラーがあったら止める)をつけてもパイプラインの左側のコマンドにエラーがあったときに処理が止まらないと書きました。 例です。 ###false | true###でfalseが終了ステータス1を返すが・・・### uedambp:~ ueda$ cat hoge.bash #!/bin/bash -e false | true echo do not stop ###-eがあるにもかかわらずechoが実行される### uedambp:~ ueda$ ./hoge.bash do not stop が、次のようにpipefailというオプショ

  • シェルショッカー様 POSIX原理主義 珠玉の金言集2016年度版 - Qiita

    この記事はPOSIX原理主義AdventCalendarの12日目です。 POSIX原理主義提唱者@richmikan様、@shellshoccarjpn様は聖典以外にツイッター上でもPOSIX原理主義についていろいろ言及されていることが多いので、このまま埋もらせておくのはもったいない!ということでここにまとめることにしました。お二人のツイートはPOSIX原理主義のことだけではなく、その周辺の技術思想、哲学のようなものが見え隠れしています。 問題は、まとめるにしてもツイートをコピペするだけのどこにでもある、まとめサイト的なことをしてもいいのかどうかが不明。おそらく良くないと思うので、なにか問題あったら削除致しますのでその時は言ってください。 欲を言うのならば、シェルショッカー様の発言は当は全て読んでほしいのですが、時間も限られているでしょうから、独断と偏見でピックアップしています。時系列

    シェルショッカー様 POSIX原理主義 珠玉の金言集2016年度版 - Qiita
  • Big Sky :: シェルで作る Twitter Bot 作成講座

    数年前 TwitterAPI はベーシック認証、かつ Public な API だったので Twitter Bot なんて楽ちんで作れたのですが、最近は認証は OAuth、Public な API も無くなってしまい Bot を作るのはとても難しくなりました。 やりたい事はそんなに大した事ではないのに、認証のおかげでコードも大きくなりがちで、気付けば体コードよりも認証用のコードの方が多くなってしまう事もあります。Bot を作りたいのに敷居が高くて手を出せない、なんて思っている方も多いかもしれません。 でももし Twitter Bot がシェルで書けたら、簡単だと思いませんか?実は twty というツールを使うと簡単に Twitter 連携アプリケーションが作れてしまうのです。 GitHub - mattn/twty: command-line twitter client writ

    Big Sky :: シェルで作る Twitter Bot 作成講座
  • xargsにメタ文字を渡したい #シェル芸 - jarp,

    ■ 05. n-gram sedを使えば結構簡単だった。 % echo 'abcdefghijkl' | sed ':;h;s/\(...\).*/\1/p;g;s/.//;t;d' abc bcd cde def efg fgh ghi hij ijk jkl \(.\{3\}\)と書けばわかりやすいか。 ■ 06. 集合 #シェル芸 和集合、積集合、差集合はすべてjoinコマンドで可能。 % bi-gram() { echo "$1" | sed ':;h;s/\(.\{2\}\).*/\1/p;g;s/.//;t;d' | sort -u; } % bi-gram paraparaparadise ad ap ar di is pa ra se % bi-gram paragraph ag ap ar gr pa ph ra % join <(bi-gram paraparapara

  • Linuxの検索方法:findとlocateの使い方

    Linuxの中にあるファイル構成をすべて覚えておいたり、必要なディレクトリをすぐに見つけたり、というのはなかなか大変なことだ。 また、自動生成したファイルや他の人が作ったファイルを探したいというときもあるだろう。 そういうときは、Linuxの検索機能を使っていく。 このページではLinuxの検索について大まかにまとめている。参考にしてほしい。 Linuxの検索について linuxに限らずOSは膨大な量のバイナリやテキスト、デバイスファイルなどのファイルの種類を問わず管理することになる。そこで重要になってくるのが「ファイルの検索」だ。 「ファイル名がわかるがどこにそのファイルがあるかわからない」「変更した日付はわかるが、名前がわからない」「とあるパーミッション情報をもっているファイルを列挙したい」など、そんな断片的な情報からファイルを検索してくれる。 Windowsの場合、右上の検索欄に検索

    Linuxの検索方法:findとlocateの使い方
  • Pysh シェルスクリプトをPythonで書く | yunabe.jp

    Pysh はシェルスクリプトをPythonで記述するためのプログラムです。 Pysh を利用すると、コマンドの実行やリダイレクションやパイプといったシェルスクリプトの 便利な機能を Python スクリプトの中で簡単に利用できるようになり、 Python をシェルスクリプトの代わりとしてより利用しやすくなります。 Python 使いならばもはやシェルスクリプトを書く理由は何もありません(Windows以外)。 目次 特徴 使い方 インストール ファイルから実行 標準入力から実行 引数から実行 機能 変数参照 Python式 パイプ リダイレクション && || ; 文字列リテラル バッククオート バックスラッシュ文字による行継続 コメント map filter reduce リターンコードの保存 Pythonへのリダイレクション echo 組み込みコマンド をPythonで実装する 特徴

  • Xpathまとめコマンドとその使用例・チートシートでカンタンに実験する - それマグで!

    はじめに。 xpath 便利です。 Xpathの書式を学ぶにはトライ・アンド・エラーが1番です。Xpathをもっと使うのためには、手軽なツールが必要です。 libxml のxpathコマンド 手軽なツールはlibxmlについてくるxmlintです。xmllint についてはココに書きました→xmlを扱う xmllint コマンドで xpath - それマグで! しかし、xmlint では日語の取扱が残念なので、xpathコマンドをnokogiriで再発明しました。 足りないので、自分で作った。 Xpathの便利さをもっと気づいて欲しい。なので手軽にXpathを試して練習したい。手軽に試したら、Xpathできたら楽しいよね。 学習用に、Xpathコマンドを作りました。 で、お手軽にXpathを作れるような方法を考えた結果、Nokogiriを利用したコマンドを作ることにした。 xpath ·

    Xpathまとめコマンドとその使用例・チートシートでカンタンに実験する - それマグで!
  • シェルの展開順序に気をつけよう - Qiita

    Shell Script Advent Calendar 2016の12月17日エントリーです(途中途切れてるので日数計算は不明)。 初級者向けの基礎知識として、シェルの展開順序について書きます。ここではbashを例に説明しますが、基は各種シェルに共通していると思います。 展開と実行の順序 端末やシェルスクリプトなどでシェルを使うときには、展開順序を意識していないと思わぬ失敗をすることがあります。展開(expansion)とは、ファイル名のパターン(ワイルドカード)やシェル変数などの処理です。 展開のメカニズムは普通のプログラミング言語のモデルと大きく異なる点の一つです。たとえば、多くのプログラミング言語の文法では変数は値の一種として扱われますが、シェルの文法では変数が展開されてから実際の処理が実行されます。このあたりの感覚は、C言語のプリプロセッサマクロなどに近いかもしれません。 ba

    シェルの展開順序に気をつけよう - Qiita
  • シェルスクリプト——こんなとき、かうする - Qiita

    POSIX シェルの小ネタ集。随時更新。 POSIX の範囲外の機能に依存するところには 【non-POSIX】 と書いておいた。 ファイル操作 空のファイルを作る touch でもいいがリダイレクトした方が速い。 >> filename # 既存ファイルは上書きしない (ファイルの更新日時も変へない) >| filename # 既存ファイルは空にする > filename # -C が有効なら既存ファイルがあるとエラーになる フィルタ ソートして重複行を消す sort | uniq でもいいが sort -u だと一コマンドで済む。 ソートせずに重複行を消す awk '!x[$0]++' 1 行番号を付加する awk '{print ++i,$0}' 【non-POSIX】 cat -n 一行目だけを消す tail -n +2 sed 1d 最後の行だけを消す head -n -1 s

    シェルスクリプト——こんなとき、かうする - Qiita
  • コマンドラインツールのショートオプションをどの用途で使うべきか - Qiita

    はじめに コマンドラインツールが多数作られるプロジェクトがあるとします。 複数人で開発していると、オプションの意味付けが人によってばらばらになってしまう――そんな事象は、おそらくよくあることだと思います。 ので、そのような環境では、なんらか規約を設けるのがよさそうです。 記事では、その規約の作成、またはオプションの意味付けにおいて、参考となるであろう情報を提示します。 特に、ショートオプション(英字1字のみのオプション)にフォーカスします。 ロングオプション(英字複数字から成るオプション)については、意味は自明になることが多いでしょう。 ただし、「ショートオプションをどのロングオプションに対応付けるべきか」という問題は、稿でも扱います。 また、コマンド文法やオプションのフォーマットはOSやプログラムによって異なりますが、ここでは以下を前提とします: ショートオプション ... -a,

    コマンドラインツールのショートオプションをどの用途で使うべきか - Qiita
  • シェルスクリプトの罠を避ける三つの tips

    シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん Bash 以外のシェルでは動きません。これに関するありがちな罠は、以下のように発生します。 Bash が /bin/sh として使われている環境でシェルスクリプトを書く。うっかり Bashism がシェルスクリプトに含まれていても、 /bin/sh は何も

    シェルスクリプトの罠を避ける三つの tips
  • Googleの肩に乗ってShellコーディングしちゃおう - Qiita

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

    Googleの肩に乗ってShellコーディングしちゃおう - Qiita
  • シェルスクリプトの書き方

    12月にTwitterに流れていたPOSIX何とかという話題を読んでいたらこの記事にたどり着いた。もう3年以上前の記事だけれど、内容がとても偏っていると思う。 シェルスクリプトの書き方について解説しているウェブ上の資料は少なく、当該記事も検索に引っかかりやすい。最近の初学者はまず検索して調べることが多いが、反論が検索に引っかからないとそれが正しいと受け入れてしまう可能性が高いように思う。きちんと反論している日語の記事が引っかからないので、あえて問題と思う点をまとめてみた。 そんなこと書いているあなたは誰? わたしはシェルスクリプトの専門家でも職業プログラマでもないけれど、シェルスクリプトを書いた量はそれなりにあると思う。環境はSunOS4, Solaris, HP-UX, IBM AIX, FreeBSD, OpenBSD, Linuxを経験していて、移植性や性能の問題がどこで発生しやす

    akanehara
    akanehara 2017/01/13
    知らなかった "setで出力される変数の一覧は、そのままevalして変数代入できることがPOSIXで保証されている。"
  • 位置パラメーターの一括展開 $* $@ "$*" "$@" の違いを知れ!! - Shell Script Advent Calendar 2016 - ダメ出し Blog

    位置パラメーターの一括展開 $* $@ "$*" "$@" の違いを知れ!! - Shell Script Advent Calendar 2016 - ダメ出し Blog Shell Script Advent Calendar 2016 の 15日目の記事です。 位置パラメーター (Positional Parameters) の紹介と、 その値をすべて展開する $*, $@, "$*", "$@" の違いについて解説します。 $*, $@, "$*", "$@" の違いを認識し使い分けできるかどうかは、 シェルをちゃんと理解しているかどうかの指標の一つと言えるのではないかと思います。 残念ながら、適切な位置パラメーター展開を用いていないシェルスクリプトが珍しくありません。 あなたのシェルスクリプトは大丈夫ですか? あなたの好きな◯◯のソースコードや配布物に付属のシェルスクリプトも要チ

  • プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita

    記事が切っ掛けとなってお声がけを頂き、記事の増補リファイン版となる記事をSoftwareDesign 2018年1月号のシェルスクリプト特集第2章として執筆しました。リファイン版には、この記事で触れていない文法面での分かりにくさについての解説が含まれています。その文法面での分かりにくさの解説の一部に相当する記事もありますので、ぜひそちらも併せてご覧下さい。 Shell Script Advent Calendarをご覧の皆様、図々しくも5日目に続く2度目のエントリーのPiroです。 前回は自作のBashスクリプト製Twitterクライアントをネタに実装を解説しましたが、今日は他の言語で多少のプログラミング経験はあるんだけど、どうにもシェルスクリプトは苦手だ……という人のための、シェルスクリプトによるプログラミングの勘所を解説してみようと思います。多分、プログラミング入門レベルの人や上級

    プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita
    akanehara
    akanehara 2016/12/08
    べつに1行毎にfork-execするわけじゃないしマルチコア活かせるから長いストリーム相手なら遠慮なくパイプ繋ぐべし