タグ

shellに関するthreeMonthsのブックマーク (23)

  • シェルを作ってみた - 理系学生日記

    字句解析 先日友人とご飯をべてるときにシェルの話になって,「シェル作るときって字句解析がメンドくさいよねー」って話になりました.シェルというと,fork だの dup だの pipe だのがミソみたいな感じですけど,個人的に一番メンドい印象があるのが字句解析だったりします.UNIX C プログラミングとかにもシェルの簡易実装例があるんですけど,そのソースはこんな感じで,空白をデリミタとして分割するだけの形になっています. void parse( char *buf, char **args ) { while ( *buf != NULL ) { while ((*buf == ' ') || (*buf == '\t')) *buf++; *args++ = buf; while ((*buf != NULL) && (*buf != ' ') && (*buf != '\t')) b

    シェルを作ってみた - 理系学生日記
  • あなたの知らない>|と<>の使い方

    >や>>、>&といったひんぱんに使われるリダイレクトに対し、ほとんど使われることのないリダイレクトが>|と<>だ。実際には興味深い機能である、これら「知られざる」リダイレクトについて説明しよう。(編集部) あなたの知らないリダイレクト、>|と<> シェルが提供する機能はカーネルが提供している機能をダイレクトに利用するものが多い。つまり、シェルの記述がダイレクトにシステムコールに結び付くような機能が多いということだ。コマンドの実行、パイプ、リダイレクトなどは、そっくりそのままシステムコールに置き換わる。 リダイレクトであれば、ほとんどのケースで>ないしは>>で事足りるはずだ。2>&1という記述はこれで1つの機能に思えるが、これは>&というリダイレクトの典型的な使い方の1つであり、つまりはリダイレクトだ。 >、>>、>&はよく使われるリダイレクトといえる。しかし、sh(1)のマニュアルには次の

    あなたの知らない>|と<>の使い方
  • シェルのリダイレクトにまつわる失敗

    Landscape トップページ | < 前の日 2004-03-27 2004-03-28 次の日 2004-03-30 > Landscape - エンジニアのメモ 2004-03-28 シェルのリダイレクトにまつわる失敗 当サイト内を Google 検索できます * シェルのリダイレクトにまつわる失敗この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [bash] シェルのリダイレクトについての理解が不十分なためにやってしまった失敗。 標準出力も標準エラー出力も /dev/null に捨てたいとき、間違えて以下のようにしてしまうことがときどきあった。最近はやらなくなったが。 # 間違い $ command 2>&1 >/dev/nullこれだと command の標準出力は /dev/null に向けられるが、command の標準エラー出力は画面に向いてし

  • シェルスクリプトを書く際に気を付けていること8箇条 - カイワレの大冒険 Third

    エンジニアという職業柄かシェルスクリプトを書くことはちょくちょくあるのですが、自分なりに気を付けていることを備忘録&自分への戒めも含めて、簡単に書いてみたいと思います。 変数は大文字 シェルスクリプト書いていれば変数の出番は至るところであるでしょう。その際、可読性を増すように、変数は大文字を使っています。 RET=`cmd1`みたいに。好みの問題もあるでしょうが、分かりやすいので。 クオテーションは選ぶ クオテーションにはシングルだったり、ダブルだったり色々ありますが、使い分けておいたほうがよいでしょう。 変数の展開がないようであれば、シングルクオーテーションのほうがスマートでしょうし、展開があるのならダブルクオーテーションを使えばと。 ダブルクオーテーションを使うのにも意味があって、変数は「$RET」のようにクオテーションで囲まなくても動作はたいていするのですが、 echo "${RET

    シェルスクリプトを書く際に気を付けていること8箇条 - カイワレの大冒険 Third
  • All commands

    Other solutions that involve doing du -sx /* are incomplete because they will still descend other top-level filesystems are that mounted directly at "/" because the * expands to explicitly include all files and directories in "/", and du will still traverse them even with -x because you asked it to by supplying the directory name as a parameter (indirectly via "*"). Show Sample Output 4.0K /mnt 4.

  • ssh の公開鍵の設定めんどい - Qiita

    $ cat "~/.ssh/id_rsa.pub" | ssh user@hostname "cat >> .ssh/authorized_keys" 長い .ssh ディレクトリないときもっと面倒 (要 mkdir .ssh) authorized_keys が新規作成された時も面倒 (要 umask 077) ○

    ssh の公開鍵の設定めんどい - Qiita
  • シェルスクリプトからsshでリモートコマンドを実行する際の注意点 - 矢野勉のはてな日記

    メモ, プログラミングシェルスクリプトからsshで複数のリモートホストにコマンドを投げつける処理を書いてて、いろいろ気がついたことを、あとで自分で調べられるようにメモしておく。 ループからsshでコマンドを投げつけるシェルスクリプトのwhileループ内から、複数のホストへ順番にコマンドを投げつける処理をかいていると、最初のホストにしかコマンドが飛ばない(ループしない)これは、シェルスクリプトのwhileループ自体が、標準入力の読み取りに依存しているのに、sshも標準入力を読み取るのが原因。たとえばこんなループの場合に起きる。 somecommand | while read LINE do ssh user@hostname 'sh yourcommand /dev/null 2>&1 &' done nオプションを付けることで、sshの標準入力が/dev/nullに変わりバックグラウンド

  • cd系コマンド - hitode909の日記

    ディレクトリ移動するのが難しいので,いくつかコマンドを作って,いまどこに居るかに関係なく相対パスで移動できるようにしました. u function u() { cd ./$(git rev-parse --show-cdup) if [ $# = 1 ]; then cd $1 fi } これは,Gitのリポジトリのトップから相対パスでcdするコマンドです. 例えば,u libってやると,リポジトリのトップ以下のlibに行ったり,u ../でリポジトリの1つ上に移動とかできます. これは前に日記に書きました. Gitのリポジトリのトップレベルにcdするコマンド - hitode909のダイアリー f export __session_from=$PWD function f() { cd $__session_from if [ $# = 1 ]; then cd $1 fi } これは,

    cd系コマンド - hitode909の日記
  • 超便利なワンライナーを、コマンドラインで検索できるgemパッケージ「cmdline-fu」 - 元RX-7乗りの適当な日々

    Linux等のコマンドラインで使える便利なワンライナーを、世界中のみんなで共有しちゃおうという「Command-line-fu」というサイトが素敵! All commands 以前、100SHIKIさんでも、以下のように紹介されていました! Command-line-fuではLinuxなんかのコマンドラインで使えるワンライナー(一行プログラム)を投稿・共有できる。 自分がよく使うワンライナーを保存しておいて使うも良し、他の達人の技を盗むも良し、の素晴らしきサービスである。 ちょっとのぞいてみただけでも「へー、一行でここまで出来るんだ・・・」という小技があってかなり勉強になる。 コマンドラインで使える超絶便利なワンライナーを投稿・共有できる『Command-line-fu』 | 100SHIKI で、サイトで新しく投稿されたワンライナーをブラウザで眺めたり、サイトでキーワード検索したり、RS

    超便利なワンライナーを、コマンドラインで検索できるgemパッケージ「cmdline-fu」 - 元RX-7乗りの適当な日々
  • vimshellが便利過ぎる件 - ぷろぐらまはっくす MkⅡ

    vimshellとは? vimshellはVimからシェルを起動するVimScript。 ただ起動するだけなら:!コマンドでも足りるけど、こちらは非同期に処理できないので、実行中はVimでコードを書けないとか欠点が多い。 vimshellなら非同期なシェルが使えるし、色分け・補完もきく。 インタプリタを立ち上げれば、コードを書きつつ評価させることもできるよ、Emacsみたいにね! インストール http://github.com/Shougo/vimshell からソースをダウンロード。 解凍したファイルを~/.vim以下に保存。 あと同作者さんのvimprocが必要なので https://github.com/Shougo/vimproc からソースをダウンロード。 こちらは~/.vim以下に保存するだけではダメで、Linuxではコンパイルする必要がある。 Linuxでは、次のコマンドを

    vimshellが便利過ぎる件 - ぷろぐらまはっくす MkⅡ
  • bash/zshのコマンドライン履歴機能。直前のコマンド、直前の引数。 - ミームの死骸を待ちながら

    よく忘れるので例示と共にメモ。ここらへん押さえておくと作業効率が上がる。bashのページで発見したものを載せている。zshでも確認した。 実行系 !! 直前に実行したコマンドを再現 !+何かの文字 !sudoとすれば、sudoで始まる直近の実行コマンドを再度実行。他にヒットしないのがわかってれば、!suとか!sでもいい。最短マッチ。 !:s/foo/bar 直前に実行したコマンドのfooをbarにして実行。gsにするとすべて置換 これは便利!! $ vim ../../.zshrc $ !:s/zsh/vim !n n番目のコマンドを実行。 hisotry | grep hogeして確認してから使うなど*1 代わりの名前系(単語指示子、というらしい) 使うケースは多い。 $ ls /etc/hoge/fuga/ $ cd !^ とか。!^が最初の引数、!$で最後、!:nでn番目、!*ですべ

  • シェルのコマンド履歴から再利用、のいろいろ - 元RX-7乗りの適当な日々

    覚えていると、たまに便利かもしれない"bash"のコマンド履歴の展開に関する技を、例を交えながらまとめてみました。 最後にも書きましたが、他にもたくさんありますので、色々試してみてください。 直前に実行したコマンドを実行 "!!"コマンドで、1つ前に実行したコマンドを再度実行できます。 $ ls -l 合計 0 -rw-rw-r-- 1 rx7 rx7 0 2009-02-26 02:20 test $ !! ls -l 合計 0 -rw-rw-r-- 1 rx7 rx7 0 2009-02-26 02:20 test n個前に実行したコマンドを実行 "!-n"コマンドで、n個前に実行したコマンドを再度実行できます。 例えば、以下の例では、"!-2"とすると、2個前に実行したコマンドを実行しています。 $ ls test $ ls -l 合計 0 -rw-rw-r-- 1 rx7 rx7

    シェルのコマンド履歴から再利用、のいろいろ - 元RX-7乗りの適当な日々
  • grepの結果をlessで色付きで見る - yasuhisa's blog

    世の中的には常識なんかもしれんけど、知らんかったのでメモ。 grep --color=always begin main.tex | less -R

    grepの結果をlessで色付きで見る - yasuhisa's blog
  • Bashの変数パラメータ展開はやっぱし便利 - harry’s memorandum

    パターン照合演算子ってやつは便利だなーとしみじみ思ったので。 バイト数だしたり $ x="/usr/share/apt/ubuntu-archive.gpg" $ echo ${#x} 33 切り出したり (${parameter:offset:length}) $ x="/usr/share/apt/ubuntu-archive.gpg" $ echo ${x:1:3} ${x:5:5} ${x:11:3} ${x:15:18} usr share apt ubuntu-archive.gpg 置換したりできる。 x="sumomo mo momo mo momo no uchi" $ echo $x sumomo mo momo mo momo no uchi $ echo ${x//momo/} su mo mo no uchi $ echo ${x//momo/banana} su

    Bashの変数パラメータ展開はやっぱし便利 - harry’s memorandum
  • ウノウラボ Unoh Labs: シェルスクリプトでプログラミング

    パワプロよりパワポケが好きなbokkoです。でも最近はPSPで遊んでいます。 今回はシェルスクリプトやコマンドラインでよく使うプログラムとその使用例の紹介です。 シェルスクリプトでは既にあるコマンドを組み合わせてプログラムを書きます。しかし、シェルスクリプトは分岐や繰り返しといった制御構造を持ち、関数や変数を扱ったり、四則演算を行うこともできます。 演算 シェルスクリプトで演算を行うにはexprを使います。 add.sh #!/bin/sh A=1 B=2 C=`expr ${A} + ${B}` echo ${C} ↑のadd.shを実行すると、 $ sh test.sh 3 $ と表示されます。↓のようにexprの引数をスペースで区切らず渡してしまうと、単に1+2と表示されてしまいますので、注意しましょう。 #!/bin/sh A=1 B=2 C=`expr ${A}+${B}` ec

  • Vim-users.jp - Hack #103: シェルをNYACUSに設定する

  • nyaos.org

    The “NYAOS” Series are the enhanced commandline shells for Windows and other OSes. OS/2 DOS Windows Linux License Build Lua Code Support

  • 上に行く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 $# ]

  • シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Java BlockingQueueで遊ぶ:パイプラインごっこ」でパイプラインの話をしたので、来の、つまりUnixのパイプやリダイレクトを少し調べてみました。 たまに話題となる some-command >file 2>&1 と some-command 2>&1 >fileの挙動の違いについて、「シェルはコマンドラインリダイレクトの指定を右から左に解釈実行する」なんて説明が見つかりました。んなバカな! パージングは左から右にするものですよ。パーズツリーを逆順にたどることはできるけど、そんなことする必然性はなんにもないよ。 次の記事を読むと、「右から左」なんて事情じゃないことが分かるでしょう。 UNIXの部屋 検索: リダイレクト シェルのリダイレクトにまつわる失敗 さてここでは、複雑なリダイレクト処理も完全に理解できる処方箋を示しましょう。例えば、次のコマンドラインが何をするか分かる

    シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • bashで始めるシェルスクリプト基礎の基礎(1/2)

    GUIに対するCUIの優位性の1つとして、作業の自動化が挙げられる。普段行う作業を1つのコマンドにまとめたり、複数のファイルに対して同じ処理を繰り返し行ったりといったことが比較的簡単なのだ。WindowsにもWSH(Windows Script Host)が用意されている。しかし、Linuxのbashスクリプトの方が簡単なのだ。 シェルスクリプトの基はコマンドを並べること コマンドによる作業を自動化するには、その内容を記述したテキストファイルを用意すればいいのです。このテキストファイルを「シェルスクリプト」といいます。 最も簡単な自動化 最も簡単なシェルスクリプトは、コマンドをそのまま並べることです。例えば、tarコマンドでファイルのバックアップを取るとしましょう。単純にルートディレクトリから下を全部バックアップするにしても、/devや/tmpは必要ないですね。すると、

    bashで始めるシェルスクリプト基礎の基礎(1/2)
    threeMonths
    threeMonths 2010/09/01
    変数にパターンマッチをして、残った部分が返る