親の環境に影響を与えないためにサブシェルで実行している部分があります。 read に複数の引数を与える read に複数の引数を与えると複数の変数に同時に値を代入可能。区切りは IFS によって変化する。 $ echo 1 2 3 | (read v1 v2 v3; declare -p ${!v*}) # `${!v*}' は前方一致展開です declare -- v1="1" declare -- v2="2" declare -- v3="3"
![read について知っておくと while read で役に立つときが来る…かも - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/cbc1f0f7d57c0fbd7dc87d81bc07542c36a83eff/height=288;version=1;width=512/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fqiita-fb-2887e7b4aad86fd8c25cea84846f2236.png)
こんにちは、TechscoreBlogのログ閲覧が日課になっている河野です。 ログをtailでリアルタイムに見ているときに、grep, awk, sedと組み合わせることがあります。ところが、特にオプションを指定しないと、各コマンドでバッファされてしまうので、ログの表示が遅延することがあります。単にアクセス状況を眺めているだけなら問題ありませんが、チューニングしてる時とか気になりますよね。 そんなわけで、今回はバッファさせない方法を紹介します。 grep : --line-buffered grepでのオプションです。正確にはバッファさせないのではなくて、1行毎に出力するというオプションです。 tail -f logfile | grep --line-buffered -vE '\.(css|js|ico|png|gif|jpe?g)'
Let's say, you have a Bash alias like: alias rxvt='urxvt' which works fine. However: alias rxvt='urxvt -fg '#111111' -bg '#111111'' won't work, and neither will: alias rxvt='urxvt -fg \'#111111\' -bg \'#111111\'' So how do you end up matching up opening and closing quotes inside a string once you have escaped quotes? alias rxvt='urxvt -fg'\''#111111'\'' -bg '\''#111111'\'' seems ungainly although
プログラムの種類によっては、そのまま実行できるものと、実行できるようにするために「ビルド」が必要なものとがあります。Cなどのコンパイルが必要な言語で書かれたプログラムは当然ビルドが必要ですし、コンパイルが不要な言語であっても、インストーラパッケージを作るというビルド作業が必要な場合はあります。 ビルド作業の自動化のためのツールとしてmakeなどがありますが、そこまで本格的な事をやる必要がない場合は、シェルスクリプトで「ビルドスクリプト」を作るのが手軽でおすすめです。この記事では、そのような場合に役立つシェルスクリプトのテクニックを4つご紹介します。 エラーの気付きやすさとデバッグのしやすさを高める メッセージに色を付ける シェル関数をライブラリにする 一時的に作業ディレクトリの中に入る エラーの気付きやすさとデバッグのしやすさを高める はじめに紹介するテクニックは問題が発生した時に気づきや
>や>>、>&といったひんぱんに使われるリダイレクトに対し、ほとんど使われることのないリダイレクトが>|と<>だ。実際には興味深い機能である、これら「知られざる」リダイレクトについて説明しよう。(編集部) あなたの知らないリダイレクト、>|と<> シェルが提供する機能はカーネルが提供している機能をダイレクトに利用するものが多い。つまり、シェルの記述がダイレクトにシステムコールに結び付くような機能が多いということだ。コマンドの実行、パイプ、リダイレクトなどは、そっくりそのままシステムコールに置き換わる。 リダイレクトであれば、ほとんどのケースで>ないしは>>で事足りるはずだ。2>&1という記述はこれで1つの機能に思えるが、これは>&というリダイレクトの典型的な使い方の1つであり、つまりはリダイレクトだ。 >、>>、>&はよく使われるリダイレクトといえる。しかし、sh(1)のマニュアルには次の
2011年2月28日月曜日 Windowsコマンドラインシェル「Nyaos」をもっと便利にする方法 前回の記事 Windowsコマンドラインシェル最右翼 「Nyaos」 で紹介しましたnyaosをもっと便利にする方法を追記したいと思います。 入力履歴を残せるようにする。 NT版 UNIX-like tools を導入する。 まず 「入力履歴を残せる」ようにしましょう。 初期設定のままだとシェルを終了すると履歴も消えてしまうんです。それは履歴を残しておくためのファイルがないからなんです。ですから、履歴を残しておくファイルを作成し⇒設定ファイルを履歴を残す設定に変更しましょう。 1、履歴を残すファイルを作るにはシェルに↓のコマンドを打ち込んでください。空ファイルをつくるwindowsコマンドです。覚えておくと便利かもしれません。 type nul < 任意のファイル名(今回は「.his
フィルタを使った文字列処理 実行した結果を``で囲みもとの変数に代入する $ str="abc def ghi" $ str=`echo "$str" | sed -e "s/def/xyz/g"` $ echo "$str" abc xyz ghi 文字列の連結 変数を並べて書く。 余分なホワイトスペースの削除 echoコマンドで出力する際にシェルが余分なスペースを削除するので、それを元の変数に戻す。 $ str=`echo $str` 文字列の長さ exprのlengthオプションを使う $ expr length "$str" 文字列の中の文字列 ある文字列がその中に含まれているか判定し含まれていればその行を書き出すのがgrepコマンド。 文字列が含まれていれば真を、含まれていなければ偽を返す。 #!/usr/bin/sh if echo "$1" | grep [0-9] ; th
シェルスクリプトでシグナルをトラップするにはtrapを使います。 最初の引数が実行コマンドで、その後ろにトラップするシグナルを並べます。 #!/bin/sh trap 'echo exit...' EXIT trap 'echo trap INT or TERM' INT TERM echo start sleep 5 echo end 出力 start end exit... start (^C押す) trap INT or TERM end exit... EXITはプロセス終了時に投げられる番号0のシグナルです。 シグナル指定は名前でも番号でもよくて、他のシグナルはtrap -lやkill -lで見れます。 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIG
case文 case文は文字列を比較して、一致したブロックを実施します。サービスの起動スクリプトなどでよく使用されます。
Twitter でつぶやいたら意外と知られて無かったので記事にしておきます。 Linux とかで巨大なログファイルとかを扱うときに、head や tail というコマンドで先頭から何行とか 末尾から何行を見たい時があると思います。 例えばアクセスログで末尾から 10000000 行目辺りをみたいとかいうときに $ tail -n 10000000 access_log | head とかするとかなり遅いと思います。これはログの後ろの方から読み込みながら 行数を計算しているからで、10000000 行分数えないとどこから表示すればいいのかわからないので なかなか結果が返ってこなくてヤキモキしてしまいます。 こんなときに、-cというオプションを使うと超高速で結果が返ってきます。-cというのは -c, --bytes=N output the last N bytes とある様に、ファイルの末尾
最近知って結構ショックを受けた。 touch hoge.txt と似たような機能。*1 $ > hoge.txt $ ls -l hoge.txt -rw-r--r-- 1 root root 0 Jul 10 03:15 hoge.txt lessでtail -f ができる。 $ sudo less +F /var/log/messages SSHでリモートサーバに対して色々 リモート先のファイルをsortして比較。パスフレーズなしにするか、ssh-agentを使用するかしてください。 $ diff <(sort /home/user/.bashrc) <(ssh user@hostname "sort /home/user/.bashrc") リモートサーバのファイルを編集 $ vim scp://user@hostname//home/user/.bashrc sambaのコマンドで
bashではCtrl-Sを入力してしまうと端末がロックされた状態になり何も受け付けなくなります。Ctrl-Qで解除できるが、普段ロックすることないしいらいらするから、無効にする方法を調べてみた。 方法はいたって簡単で # stty stop undef でOK。常に有効にしたい場合は.bashrcなどにどーぞ。 Ctrl-Rはreverse-i-searchでコマンド入力履歴をさかのぼって検索できますが、たまに行き過ぎて戻りたくなることがあります。上記の設定でCtrl-Sのロックを無効にすることでi-searchができるようになり、戻ることができます。 ちなみに、Ctrl-Cで実行中のプログラムを止めるのもこのsttyで無効にできます。どのような機能が定義されているかは”stty -a”コマンドでわかります。 $ stty -a speed 38400 baud; rows 50; col
ディレクトリ操作 lsの使うオプション ...-l,-a,-F,-i # ディレクトリをすべて消す場合(先頭の\は後述) \rm -rf ディレクトリ名 # 全部コピー cp -ar srcdir destdir ...-aはGNU lsのオプション # cp -aがどこまで信用できるか不明、あるいはGNU lsがない時に、使うテクニック tar cf - srcdir | (cd /destdir; tar xf -) ファイル操作(リンク) ハードリンク vs. シンボリックリンク ln #ハードリンク ...異なるファイル名で同一のi-nodeを共有(ls -iで確認可能) ln -s #シンボリックリンク ...ポインタ 注意点 ハードリンクは対称(ln a bでもファイルaとbに主従関係はない) i-nodeはデバイス(dfで見えるディスクデバイス)で一意なので、デバイスを越えて
ファイル名の入力を簡単にするにはで、ファイル名を入力する際のファイル名補完機能について説明した。デフォルト設定では、ファイル名の補完は大文字と小文字が区別される。例えば、「vi /etc/X11/XF86Config-4」というコマンドを実行するなら、「vi /etc/X」と入力して[Tab]キーを押さなければ「vi /etc/X11」とは補完されない。大文字と小文字を区別しなくなれば、「vi /etc/x」と入力すればいいので[Shift]キーを押す必要がなくなる。 大文字と小文字の区別をしないようにするには、~/.inputrcに以下の行を追加する。ちなみに、/etc/inputrcに追加すると設定が全ユーザーに適用される。
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.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く