ログインすると、デフォルトではbashが起動してコマンド待ちのプロンプトが表示される。ここからさまざまな作業を行うわけだが、場合によってはシェルからさらにシェル(子シェル)を呼び出し、さらにそこからシェル(孫シェル)を呼び出すということがある。そのような作業をしていると、シェルの深さが分からなくなってしまうこともある。 現在のシェルの深さは、SHLVLという環境変数に保持されている。従って、
ログインすると、デフォルトではbashが起動してコマンド待ちのプロンプトが表示される。ここからさまざまな作業を行うわけだが、場合によってはシェルからさらにシェル(子シェル)を呼び出し、さらにそこからシェル(孫シェル)を呼び出すということがある。そのような作業をしていると、シェルの深さが分からなくなってしまうこともある。 現在のシェルの深さは、SHLVLという環境変数に保持されている。従って、
http://yapcasia.org/2014/talk/show/b49cc53a-027b-11e4-9357-07b16aeab6a4
Unix ではファイル記述子というのがあって、番号、多くの場合 0, 1, 2 が使われます。0は入力、1は普通のメッセージ出力、2はエラーメッセージの出力というように使い分けされています。 さて、ご質問ですが、command > /dev/null という部分は、command の普通のメッセージ(ファイル記述子1番)を /dev/null というファイル(このファイルは特殊で、ここに出力された内容は全て捨てられます)に出力されます。で、残る "2>&1" という部分ですが、これは2番のファイル記述子を1番というファイル記述子にする、という意味になります。 従いまして、"command > /dev/null 2>&1" とすることで command からの全てのメッセージは(/dev/nullに)捨てられる、つまり、エラーがあろうがなかろうが出力されるメッセージは何もないことになります
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 って
はじめに これから書く内容は、シェルスクリプトをばりばり書いている現場(サーバエンジニア・インフラエンジニア)向けのものではありません。 年に数回crontabをいじるような現場(サーバに詳しくないアプリケーションプログラマが多数を占めるような現場とか、Webデザイナや非プログラマがcrontabをおそるおそるいじったりするような現場)を想定しています。 >/dev/null 2>&1 の問題点 この記法の問題点は、「覚えにくい、間違えやすい、間違ってても気づかない」ということです。 初心者を迷わせる要素がこんなにあります。 >/dev/nullは先か後か 1と2はどちらが先か &はどこに書くのか よって下記のように多種多様なミスが起こり得ます。 2>&1 >/dev/null >/dev/null 1>&2 >/dev/null 2>1& >/dev/null &2>1 これをぱっと見て
[Linux] => [シェルスクリプト] echoで出力した文字は最後に改行されてしまいますが、-nオプションをつければ改行されずに出力されます。 « $# - 引数の個数 | | 数値比較演算子 »
.bash_profileの中にエイリアスを設定してその中に引数をとりこみたい。 例えばcsh系では、含めることができる。 ech 引数とうつと、test引数と表示させるとする。
エスケープシーケンス一覧表 記号意味 \aベル文字(アラート) \b1文字分戻る \fページ送り(クリア) \n改行、復帰 \r同じ行の先頭に戻る \t水平タブ \v垂直タブ \\\を表示 \??を表示 \'シングルクォーテーション(')を表示 \"ダブルクォーテーション(")を表示 \0ヌル \N8進定数(Nは8進数の定数) \xN16進定数(Nは16進数の定数)
今回は少々マニアックというか,重箱の隅的お話です. bash(1) には,複数のコマンドをまとめたり,コマンドの実行結果をコマンドラインに取り込むための記法が複数あります.それらのコマンドを実行するために,bash は必要に応じてサブシェルを起動しますが,どういう記述をした際にサブシェルが起動されるのか,いまいちはっきりしなかったため,実際に試してみました.今回試したのは,( ), $( ), { }, <( ) です. を実行して,ps コマンドの親プロセスがどれになっているかで確認しています.bash が設定する $PPID 変数を見ないのは,変数の展開をどのシェルがするかに依存するために,確認しにくいからです.ps コマンドを --forest オプション付きで単純に起動すると $ ps --forest PID TTY TIME CMD 20218 pts/18 00:00:00
In order for your app to take full advantage of the iPhone 4 Retina Display, you'll need to add 2x resources to your iPhone project. If you're using SVN to manage your files, you'll be faced with something pretty annoying: $ svn add Default@2x.png svn: warning: 'Default' not found This was incredibly frustrating for me, no matter how I tried to escape it: single quotes, double quotes, backslashes,
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く