タグ

unixとshellに関するmas-higaのブックマーク (7)

  • シェルスクリプトの [ ] と [[ ]] の違いを歴史的に解説 〜 言語設計者の気持ちになって理解しよう - Qiita

    はじめに bash などのシェルには [ ... ] と [[ ... ]] の二種類の比較方法があります。一つはコマンド、もう一つはシェルの文法なのですが、具体的にはこの二つは一体何が違うのでしょうか? そもそもなぜ似ている機能が二つもあるのでしょうか? この記事は言語設計者の気持ちになって考えることで、その理由を解き明かそうという記事です。 なお、違いについての簡単な説明については「test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog 」の記事がよくまとめられていますので紹介します。一通りの違いを素早く知りたい方はこちらを参照してください。 参考 シェルの歴史や種類については「シェルの歴史 総まとめ(種類と系統図)と POSIX の役割」に詳しくまとめています(系統図とか頑張って書いたので見

    シェルスクリプトの [ ] と [[ ]] の違いを歴史的に解説 〜 言語設計者の気持ちになって理解しよう - Qiita
  • パイプとフィルタ ~ソフトウェア工学における有用なアーキテクチャ~ | POSTD

    パイプライン は、最近のソフトウェアエンジニアリングにおいて、非常に便利な(そして驚くほど活用されていない)アーキテクチャパターンです。ソフトウェアでデータの流れを制御するためにパイプとフィルタを用いる考え方は、最初のUNIXシェルが作られた1970年代からあります。もしターミナルエミュレータでパイプ” | ”を使ったことがあるなら、”パイプとフィルタ”を活用できていることになります。以下の例を見てみましょう。 cat /usr/share/dict/words | # Read in the system's dictionary. grep purple | # Find words containing 'purple' awk '{print length($1), $1}' | # Count the letters in each word sort -n | # Sort l

    パイプとフィルタ ~ソフトウェア工学における有用なアーキテクチャ~ | POSTD
    mas-higa
    mas-higa 2014/11/25
    pressure というプロダクトの宣伝。$PIPESTATUS とか mkfifo とかで満足した人がそこまで読んだかどうか。
  • Rubyでシェルもどきを作る - tmtms のメモ

    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

    Rubyでシェルもどきを作る - tmtms のメモ
  • 僕がMacのホームディレクトリを削除するに至った経緯と、復元するまでの道のり | CreativeStyle

    最初に結論から申し上げますと、僕 @kadoppe はアホです。大馬鹿者です。 この度、仕事にフル活用しているMacBook Proのホームディレクトリ(/Users/<ユーザ名>)を削除するという愚行を働いてしまいました。 具体的に何をしたのか。それは、以下のコマンドの実行です。 コマンドにあまり詳しくない人のために説明すると、この短いコマンドをターミナルを開いて実行するだけで、有無を言わさずホームディレクトリの削除が開始されてしまう、恐怖のコマンドです。良い子は危険だから真似しちゃダメだよ! ではここからは、僕は何故こんなことをしてしまったのか、その経緯を言い訳がましく説明したいと思います。恥ずかしいですが、二度とこんなことを繰り返さないようにするために。 「~」という名前のディレクトリ 通常「~」(チルダ)という記号はホームディレクトリを表します。~/はMacだと実際には/Users

    僕がMacのホームディレクトリを削除するに至った経緯と、復元するまでの道のり | CreativeStyle
    mas-higa
    mas-higa 2013/04/09
    bash なら ls ./~ とかして、確認してから rm -rf !$
  • xargs を使ってカジュアルに並列処理 - たごもりすメモ

    シェルからでも重い処理というのはちょこちょこあって、例えば超デカいログファイルを移動して圧縮したりというお仕事は世界中のあらゆる場所で毎日行われていたりする。コマンドラインからでも大量の圧縮済みログファイルをいっぺんに展開したい、とか。 あるディレクトリ以下に存在するたくさんのファイルを(圧縮済みのものを除いて)全部 bzip2 圧縮したい!と思ったら、とりあえずさくっと次のようにコマンドラインで叩けばいい。 $ find . -not -name '*.bz2' | xargs bzip2 これで、まあそんなに問題なく効率的にbzip2圧縮ができる。だがしかし。 最近は複数コアのCPUが普通に転がってるし、あまつさえHyperThreadingが有効になってたりしてOSから見える論理CPU数がハンパない。普通に8とかある。その一方で複数コアを使用してくれるコマンドというのはあんまりなくて

    xargs を使ってカジュアルに並列処理 - たごもりすメモ
    mas-higa
    mas-higa 2011/05/16
    初めて xargs の使い所が分かった。
  • 上に行くcd作った - hitode909の日記

    シェルで,上のディレクトリに行くのがめんどくさくて,cd ../../../../とかしないといけなくて,指を痛める. 上に行くためのupっていうコマンドを作ることにした. その1 up 3ってやると,3つ上に行くのを作った. function up() { i=0 while [ $i -lt $1 ] do cd ../ i=`expr $i + 1` done } 使い方 % pwd /Users/fkd/co/dev/dotfiles % up 3 % pwd /Users/fkd %これは使いにくくて,cd ../../って打つときは,いくつ上に行くか考えながら,../って打ってる.これだと,先に数えておかないといけなくて,難しかった. その2 考えながら入力できるようにしてみた.引数の数だけ見る. function up() { i=0 while [ $i -lt $# ]

    上に行くcd作った - hitode909の日記
    mas-higa
    mas-higa 2010/10/07
    popd使うことは稀。たいてい pushd +2 とかしてる。
  • 10.2 有害な csh プログラミング

    Path: coconuts.jaist!wnoc-tyo-news!newsfeed.btnis.ad.jp!np0.iij.ad.jp!news.iij.ad.jp!rim.or.jp!tamaru-news!kuee-news!kuis-news!news.cs.ritsumei.ac.jp!odins-suita!chiba-ns!sakunami!Makino-Lab.cc.tohoku.ac.jp!not-for-mail From: hiroki@aso.ecei.tohoku.ac.jp (Hiroki Mori) Newsgroups: fj.archives.documents Subject: Csh Programming Considered Harmful (in Japanese) Supersedes: <5s83cm$rrg$1@dp-cc.cc.toho

  • 1