私はUnixでプローブしています。
これはどういう意味ですか?
type ant 1>/dev/null
moduledir=`dirname $0`
ありがとう。
1>/dev/null
STDOUT
最初の行で、 (標準出力)をにリダイレクトし/dev/null
ます。つまり、コマンドを実行した後、エラー(存在する場合)のみが画面に表示されますtype ant
。
2行目は、実行されたファイル名であるコマンドmoduledir
の出力に変数を設定します。dirname $0
$0
type
基本的に、引数のタイプを示します。あなたの場合、それは次のant
ようなパスを出力します:ant is /usr/bin/ant
>
ストリームリダイレクト用です。標準出力を1>
リダイレクトします。
標準ストリームの詳細については、こちらをご覧ください。
type ant 1>/dev/null
すべてが正常であれば、最終的に何も出力されないはずです。
コマンド(UNIXでは、type
これをMS-DOS / Windowsと混同しないでくださいCMD.EXE
)は、実行された場合にコマンドがどのように解釈されるかを示します。
この方法を使用すると、コマンドが見つからない/実行可能でない場合にtype
エラーメッセージ(例ant not found
)が出力されます。ant
他の人が言っているように、1>/dev/null
(または単に>/dev/null
)そのコマンドによって標準出力に書き込まれたメッセージを「どこにも」リダイレクトしません。つまり、それらは端末/コンソールに出力されません。標準エラーストリームに書き込まれるメッセージは引き続き発生します。その行はant
実行/検出できるかどうかをチェックするためのものだったようですが、スクリプトを中止するためのそれぞれのチェックは提供されていませんでした(シェルによって異なりますが、Bourneシェルのように見えます)とにかくフレーバー):
type ant > /dev/null
[ $? -ne 0 ] && exit 1
別の注意:bash
typeコマンドを使用すると、出力が標準エラーストリームに書き込まれることはありません。つまり、メッセージでさえ... not found
標準出力に書き込まれます。したがって、コマンドは、エラーが発生した場合でも(このフラグメントがチェックとして使用されていることを考えると、メッセージを表示するのが適切であると思われる場合でも)、現状では何も出力しません。
最後に、
moduledir=`dirname $0`
lineは、現在実行中のスクリプトのディレクトリ名を変数に格納しますmoduledir
。$moduledir
後で、たとえば次のように参照できますecho "The directory is: $moduledir
。
率直に言って、あなたの質問にあるように分離された2つのステートメントはほとんど意味がありません。構文的には正しいですが、それらはより深い意味を持たないため、それらが何のためにメンターされたかを推測することしかできません。(任意の)構文を投稿するだけでなく、実際に何を達成しようとしているのかについて別の質問をすることを検討することをお勧めします。