Ask questions, find answers and collaborate at work with Stack Overflow for Teams. Explore Teams Collectives™ on Stack Overflow Find centralized, trusted content and collaborate around the technologies you use most. Learn more about Collectives
シェルスクリプトにおいて、複数のコマンドを連結して処理するときに、「;」「&」「&&」「||」が使えるですんが、それぞれがどのような動きするかまとめてみました。 ;(セミコロン) 前のコマンドが終わり次第、次のコマンドが実行される。(3つ以上のコマンドを連結してOKみたい) #command1 を実行し、実行後 command2 を実行する。 command1 ; command2 &(アンパサンド) ;(セミコロン)は前のコマンドの完了を待っていたが、&は待たない。 #command1 を実行しながら、command2 を実行する。 command1 & command2 && 前のコマンドがうまく終了した(終了ステータスが0)なら、次のコマンドを実行。そうでないなら次のコマンドは実行しない。 #command1 が 0 を返した場合、command2 を実行 command1 && c
which を使う 最初に思いついた方法. if [ `which SOME_COMMAND` ]; then echo 'found' fi # 一行で which SOME_COMMAND > /dev/null 2>&1 && echo 'found' type を使う OSに付属するシェルスクリプトを読んで技術を盗む(1/2) - @IT で紹介されていた方法. コマンドは違うが考え方は上記と同じ. if type logger > /dev/null 2>&1; then LOGGER="logger -s -p user.notice -t dhclient" else LOGGER=echo fi command -v を使う rvm がこういうふうにやっていた. なぜ builtin command というふうにわざわざやっているのかがよくわからない. command って
とある引用から。 技術者であればだれでも経験することでしょうけれども、自分が作ったものを他人に理解させるというのは存外に難しく、なぜかというと開発者自身はどうしても開発した時の思考の流れを重視してしまい、読者にとって理解しやすい話の流れで話すという思考の大転換が困難だからです。そういえば、開発者自身による解説書の名著って意外なくらい少ないと思いませんか? 私は先月末に zplug という zsh 用のプラグインマネージャーをリリースした。以下の記事では、zplug が生まれた背景やその周辺事情を導入として書いたため、もしかするとユーザ目線からでは分かりづらかったかもしれない。 おい、Antigen もいいけど zplug 使えよ そこで今回は開発者としての記事ではなく、いちユーザとして(といっても開発者がユーザ目線でプロダクトを語るのは冒頭の引用にもある通りひどく難しいことである)使い方を
Prezto 今回はコマンドライン環境の話です。私は以前より oh-my-zsh を利用していましたが、テーマの調子が悪かったので Prezto に乗り換えてみました。結構快適だったので、いまは Prezto を使っています。 本稿では Zsh + Prezto で快適なコマンドライン環境を構築する方法について簡単ですがご紹介します。 Zsh + Prezto 環境を構築する 環境構築の手順については README に書いてありますので、手順通り進めれば問題なく環境づくりができると思います。なお、コマンド実行すると .zlogin .zlogout .zprofile .zshenv .zshrc のシンボリックリンクを貼るので、oh-my-zsh から乗り換える場合など、既存の Zsh 環境を引き継ぎたい場合は各設定ファイルを退避させておきましょう。 // Zsh起動 $ zsh //
このドキュメントの内容は、以下の通りです。 はじめに Unix系OSでファイルを探す方法 findコマンドとほかのコマンドを連携する方法 xargs コマンド とは findとxargsの連携で問題になるケースとは findとxargsを組み合わせて失敗する例 スペースが含まれるファイル名を正しく扱う方法 まとめ はじめに 2018-05-03 に ページのタイトルはそのままですが、「真 UNIX findとxargsコマンドで-print0オプションを使う理由」として記事をアップデート致しました。 毎日やることの1つに、なにかを探すことが含まれます。インターネットで何かを調べていたり、作ったファイルやダウンロードしたファイルを探したりしています。ファイルを探すと同時に探したファイルに対して、何らかの変更を加えることもしばしばあります。 ファイルを検索とファイルの編集を一度にできたら、と思
シェルスクリプトにおいて、複数のコマンドを連結して処理するときに、「;」「&」「&&」「||」が使えるですんが、それぞれがどのような動きするかまとめてみました。 ;(セミコロン) 前のコマンドが終わり次第、次のコマンドが実行される。(3つ以上のコマンドを連結してOKみたい) #command1 を実行し、実行後 command2 を実行する。 command1 ; command2 &(アンパサンド) ;(セミコロン)は前のコマンドの完了を待っていたが、&は待たない。 #command1 を実行しながら、command2 を実行する。 command1 & command2 && 前のコマンドがうまく終了した(終了ステータスが0)なら、次のコマンドを実行。そうでないなら次のコマンドは実行しない。 #command1 が 0 を返した場合、command2 を実行 command1 && c
シェルスクリプト(sh)で、ある変数が空文字列かどうかを調べるには、testコマンドの -n (Nonzero length) または -z (Zero length) を使う……と書いてあるんだけど、コツがいる。 if [ -n $HOGE ]; then echo "nonzero だよ。" fi ↑これはダメ if [ -n "$HOGE" ]; then echo "nonzero だよ。" fi これならOK。 要は、変数が文字列埋め込みされてないと上手く動かない。何故か?はよくわからない。(シェルに於ける変数の概念はどういうものなのか?) 真理表にまとめると、こんな感じ。 -n -z $UNDEFINED T T $ZEROLEN T T $NONZEROLEN T F "$UNDEFINED" F T "$ZEROLEN" F T "$NONZEROLEN" T F 検証用ス
ホームページ制作でデザインデータ等のやりとりでZIPファイルがよく使われますが、ZIPファイルの取り扱いで困ったときの子ネタをご紹介します。 相手からのZIPファイルが壊れている (データが途中まで) 大容量のZIPファイルを転送してもらったのはいいけど、なぜか、データが途中までで、ZIPファイルが壊れている状態。いくら、ZIP解凍ソフトで解凍しようともエラーがでて解凍できない。 そこで、Windowsなどでは信用できないので、Linuxターミナルからunzipコマンドで解凍してみると、下記のようなエラーがでました。どうやら、終了までデータがない様子。または、マルチパート・アーカイブの一部なのか。 # unzip hoge.zip Archive: hoge.zip End-of-central-directory signature not found. Either this fi
Shellscript で 指定回数ループする場合を調べていたら、 while でインクリメントしていくか、for in seq の2 パターンが見つかった。 どちらが高速なのか疑問に思ったのでベンチマークを取った。 while code #!/bin/sh i=0 while [ $i -ne 10000 ]; do i=`expr $i + 1` echo $i done result $ time ./while.sh real 0m20.557s user 0m4.466s sys 0m10.371s for code #!/bin/sh for i in `seq 1 10000`; do echo $i; done result $ time ./for.sh real 0m0.188s user 0m0.132s sys 0m0.041s 考察 while が圧倒的に遅いこと
B! 6 0 0 0 Bashでの数の取り扱いについて今更ながら知ったことがあったのでまとめ。 特にスクリプトなどで数値をインクリメントしたいときなどにどうするか、について。 expr let 二重括弧 コロン+二重括弧 さらに短縮 小数を取り扱いたい時 expr 恐らく最初に最初に覚える方法。 というか純粋なBourn Shell (sh)だと下のletや二重括弧記号が使えないのでこれが基本。 今やshもほとんどbashへのリンクになったりしてるので 問題ないかもしれませんが、移植性を高くしたければexprにしておくのが無難。 $ a=1 $ a=`expr $a + 1` $ echo $a 2 と言った感じ。 扱える数値は整数のみ。exprに与える式は演算子の両側に必ずスペースが必要です。 exprで四則演算などに文字列を渡すとエラーになります。 $ expr a + 1 expr:
シェルプログラミングにおいて、ループカウンタなどをインクリメントするとき、どのようにしますか? いきなりですがサンプルから。 #!/bin/bash COUNT=0 while [ $COUNT -lt 1000 ]; do # 何かの処理 COUNT=`expr $COUNT + 1` # COUNT をインクリメント done expr コマンドを使う? シェルプログラミングの入門記事などを見ると、変数のインクリメントに上記のような COUNT=`expr $COUNT + 1` を用いているものが多くあります。 しかし、この書き方は とても遅い です。空のループを1000回繰り返すだけでも手元の mac (Core i7) で約2秒もかかってしまいました。
変態そうで変態じゃない、少し変態なbash。 最近bashでシェルスクリプトをよく書くんですが、結構奇っ怪な文法で便利なのがあるので自分用にメモ。 もうbashちゃんがいないと生きていられないよお…。 csh? zsh? ハッ。ていうこのスタンス。*1 二重かっこで囲って演算子を使う $(())の中ではbash独自の演算子がつかえる文法。 $ bash << 'EOF' > a=10 > b=20 > hoge=$((a+b)) > echo $((a/5)) > echo ${hoge} > EOF 2 30expr使うよりもbash組み込みのこちらの方が環境依存がなく良いらしい。(参考: bashでexprを使わずにインクリメント処理する。 - 0xDB) exprでは演算子との間にスペース必須だったがこれはスペースがあってもなくてもどちらでも良い。 インクリメントもできるのでだいぶコ
はじめに linuxコマンドのlnについてのおはなし 特に相対パスでのシンボリックリンクについて。 普通にシンボリックリンク シンボリックリンクはこんな説明が多い ln -s リンクされるfile(or dir)パス リンク名称ぜんぜんそうだね、と思ってたけど相対パスでのシンボリックリンク時につまづいた。 自分がよく使うのはこんな感じ ln -s /tmp/anydir1/anydir2 /home/hoge/anydir2理解してなかったのは相対パスでシンボリックリンクを貼るとき。 相対パスでのシンボリックリンク ファイルの構成がこんな感じだったとして。。。 # tree ./lntest/ ./lntest/ └── projectDir └── dirA ├── dirB ├── dirC │ └── dirD │ └── dirE ←ここにdirGへのシンボリックリンクを相
Linux で DOS のバッチファイル的な簡単なスクリプトを作成するにはシェルスクリプトを使用します。 しかし、一口にシェルと言っても、B shell、C shell、bash などいろいろな種類があるんですね。 使用しているディストリビューションがサポートしているならどれでも使えるということなので、それぞれ特徴を考慮してどれを使うかを選択すればいいようです。 しかし、そう言われても特徴を意識しなければならないほど難しいことをしようと思っているわけでもないですし、どれを使うか戸惑ってしまいます。 Linux の標準は一応 bash らしいので、bash を使うことにしましたが、オープンソースの世界ならではの利点というか欠点というか...ビシッと統一してもらいたいというのが本音です。(せめて文法くらいはね^^;) と、シェルの種類自体もいろいろあるのですが、その実行方法にもいろいろあるよう
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く