1

私はUnixでプローブしています。

これはどういう意味ですか?

type ant 1>/dev/null
moduledir=`dirname $0`

ありがとう。

4

2 に答える 2

1

1>/dev/nullSTDOUT最初の行で、 (標準出力)をにリダイレクトし/dev/nullます。つまり、コマンドを実行した後、エラー(存在する場合)のみが画面に表示されますtype ant

2行目は、実行されたファイル名であるコマンドmoduledirの出力に変数を設定します。dirname $0$0


type基本的に、引数のタイプを示します。あなたの場合、それは次のantようなパスを出力します:ant is /usr/bin/ant

>ストリームリダイレクト用です。標準出力を1>リダイレクトします。

標準ストリームの詳細については、こちらをご覧ください。

type ant 1>/dev/nullすべてが正常であれば、最終的に何も出力されないはずです。

于 2012-08-20T05:40:20.570 に答える
1

コマンド(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

別の注意:bashtypeコマンドを使用すると、出力が標準エラーストリームに書き込まれることはありません。つまり、メッセージでさえ... not found標準出力に書き込まれます。したがって、コマンドは、エラーが発生した場合でも(このフラグメントがチェックとして使用されていることを考えると、メッセージを表示するのが適切であると思われる場合でも)、現状では何も出力しません。

最後に、

 moduledir=`dirname $0`

lineは、現在実行中のスクリプトのディレクトリ名を変数に格納しますmoduledir$moduledir後で、たとえば次のように参照できますecho "The directory is: $moduledir

率直に言って、あなたの質問にあるように分離された2つのステートメントはほとんど意味がありません。構文的には正しいですが、それらはより深い意味を持たないため、それらが何のためにメンターされたかを推測することしかできません。(任意の)構文を投稿するだけでなく、実際に何を達成しようとしているのかについて別の質問をすることを検討することをお勧めします。

于 2012-08-20T06:00:17.047 に答える