タグ

ブックマーク / ogawa.s18.xrea.com (9)

  • zshでPATHのような変数の値が重複しないようにする - メモの日々(2017-12-13)

    ■ [shell][howto] zshでPATHのような変数の値が重複しないようにする zshにて環境変数PATHのようにコロン区切りの変数の値が重複しないようにしたい。 $ VAR=aaa:bbb:aaa としたときに $ echo $VAR aaa:bbb と振る舞って欲しいということ。 以前は「いい方法は見当たらなかった」と書いているがいい方法はある。 設定方法 組み込みコマンドのtypesetを使って $ typeset -TU VAR var とする。「var」の部分はほかの変数と同名にならなければ何でもよい。 -Tオプションで変数VARを配列変数varと関連づけ、-Uで重複除去の属性をセットしている。-Tは余計な設定に感じるが、これが無いと動作しない(少なくとも手元のzsh 4.3.11では)。 動作例 $ VAR=aaa:bbb:aaa $ echo $VAR aaa:bb

    zshでPATHのような変数の値が重複しないようにする - メモの日々(2017-12-13)
    hikazoh
    hikazoh 2017/12/14
  • Bashにおけるリダイレクト - メモの日々(2017-05-24)

    ■ [shell][unix] Bashにおけるリダイレクト おれはリダイレクトを雰囲気で使っている。たまに混乱するので気になる所を調べてメモしておく。使用するシェルはBashとする。 ファイルディスクリプタ リダイレクトを理解するにはファイルディスクリプタを理解する必要があるだろう。ファイルディスクリプタをどう表現するのが正しいかよくわからないが、 入出力先を持つ非負の整数 でどうだろうか。入出力先はファイルや画面、キーボードなどになる。 プロセスは生成されたときに0,1,2という3つのファイルディスクリプタを持っている。これらが入出力先として何を持っているのかは親プロセスが決めることであり、プロセス自身は関知しない。 リダイレクトとは シェルがリダイレクトで行うのは、 新しいファイルディスクリプタを作成しその入出力先を設定する。 既存のファイルディスクリプタの入出力先を変更する。 ファ

    Bashにおけるリダイレクト - メモの日々(2017-05-24)
    hikazoh
    hikazoh 2017/06/16
  • Bashのexecコマンド - メモの日々(2017-05-25)

    ■ [shell][unix] Bashのexecコマンド Bashにはexecという組み込みコマンドがある。このコマンドには command が指定されていない場合、任意のリダイレクトはカレントシェルで効果を持ち、 終了ステータスは 0 となります。 という機能がある。これはシェルが持つファイルディスクリプタを操作する目的に使える。例えば、 $ exec >/tmp/oreore を実行すると、ファイルディスクリプタ1(標準出力)の出力先が /tmp/oreore に変更され、以降このシェル上での標準出力への出力は画面ではなく /tmp/oreore に対して行われるようになる。 (ファイルディスクリプタやリダイレクトについては昨日のメモを参照せよ)

    Bashのexecコマンド - メモの日々(2017-05-25)
    hikazoh
    hikazoh 2017/06/16
  • flockコマンドを使用して二重起動を防ぐ - メモの日々(2017-05-29)

    ■ [shell][unix] flockコマンドを使用して二重起動を防ぐ Linux上でコマンドの二重起動を防ぐにはどうするか。flockコマンドを使うのがよさそう。 flockコマンドは指定ファイルをロックしてコマンドを実行するコマンド。-n オプションによりロック中の場合は直ちに処理を終了できる。 $ flock -n lock echo hello flockにはファイルではなくファイルディスクリプタを指定することもできて、この場合はそのファイルディスクリプタを閉じるまでロックが維持される。シェルスクリプトの中で排他制御を行うときはこのモードを使とよい。シェルスクリプト自身を入力用にオープンしてロックするのがお手軽。 #!/bin/bash set -e ( flock -n ${my_fd} || exit 1 sleep 5 echo hello ) {my_fd}< "$0"

    flockコマンドを使用して二重起動を防ぐ - メモの日々(2017-05-29)
  • Bashで乱数 - メモの日々(2017-05-31)

    ■ [shell] Bashで配列 Bashでは a=(a b c d e) のように()を使うと配列を生成することができる。 要素の参照 echo ${a[0]} #=> a echo ${a[1]} #=> b echo ${a[-1]} #=> e echo ${a[@]} #=> a b c d e echo ${a[@]:2} #=> c d e echo ${a[@]:2:2} #=> c d 要素数とインデックスの参照 echo ${#a[@]} #=> 5 echo ${!a[@]} #=> 0 1 2 3 4 要素の追加と削除 a+=(hello) && echo ${a[@]} #=> a b c d e hello a[100]=world && echo ${a[@]} #=> a b c d e hello world unset a[2] && echo ${a

    Bashで乱数 - メモの日々(2017-05-31)
    hikazoh
    hikazoh 2017/06/16
  • Bashで計算 - メモの日々(2017-05-31)

    ■ [shell] Bashで配列 Bashでは a=(a b c d e) のように()を使うと配列を生成することができる。 要素の参照 echo ${a[0]} #=> a echo ${a[1]} #=> b echo ${a[-1]} #=> e echo ${a[@]} #=> a b c d e echo ${a[@]:2} #=> c d e echo ${a[@]:2:2} #=> c d 要素数とインデックスの参照 echo ${#a[@]} #=> 5 echo ${!a[@]} #=> 0 1 2 3 4 要素の追加と削除 a+=(hello) && echo ${a[@]} #=> a b c d e hello a[100]=world && echo ${a[@]} #=> a b c d e hello world unset a[2] && echo ${a

    Bashで計算 - メモの日々(2017-05-31)
    hikazoh
    hikazoh 2017/06/16
  • Bashで配列 - メモの日々(2017-05-31)

    ■ [shell] Bashで配列 Bashでは a=(a b c d e) のように()を使うと配列を生成することができる。 要素の参照 echo ${a[0]} #=> a echo ${a[1]} #=> b echo ${a[-1]} #=> e echo ${a[@]} #=> a b c d e echo ${a[@]:2} #=> c d e echo ${a[@]:2:2} #=> c d 要素数とインデックスの参照 echo ${#a[@]} #=> 5 echo ${!a[@]} #=> 0 1 2 3 4 要素の追加と削除 a+=(hello) && echo ${a[@]} #=> a b c d e hello a[100]=world && echo ${a[@]} #=> a b c d e hello world unset a[2] && echo ${a

    Bashで配列 - メモの日々(2017-05-31)
    hikazoh
    hikazoh 2017/06/16
  • WPFでICommandとINotifyPropertyChangedを使う - メモの日々(2017-06-12)

    ■ [c#] WPFでICommandとINotifyPropertyChangedを使う WPFではボタンやメニューをクリックしたときにICommandを実装したクラス(コマンド)のメソッドを呼び出す仕組みがある。また、INotifyPropertyChangedを実装することでViewModelの状態変化をViewへ通知することができる。これらの機能を使った次のプログラムを作ってみた。 追加ボタンをクリックするとテキストボックスの内容を画面下部に追加する。このときテキストボックスの内容はクリアする。 テキストボックスが空だとボタンはクリックできない。 MainWindow.xaml <Window x:Class="Hello.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xm

    WPFでICommandとINotifyPropertyChangedを使う - メモの日々(2017-06-12)
    hikazoh
    hikazoh 2017/06/16
  • Javaがサポートするロケールの一覧 - メモの日々(2016-06-10)

    ■ [java][dev] Javaがサポートするロケールの一覧 Javaがサポートするロケールについてのドキュメントは JDK 8 and JRE 8 Supported Locales (Oracle) のようだ。Java(tm)の国際化サポートというページからリンクされている。 Java 6の頃のロケール一覧のドキュメントは翻訳されている。 サポートされているロケール (Oracle

    Javaがサポートするロケールの一覧 - メモの日々(2016-06-10)
    hikazoh
    hikazoh 2016/06/19
  • 1