1

次のシェルスクリプト行を理解するのに助けが必要です。

apphome =     "`cd \`dirname $0\` && pwd && cd - >/dev/null`"

私が理解しているのは、これはapphomeという変数を作成しているということだけです。

4

2 に答える 2

1

これは有効なシェルコードではありません。

シェルは周りにスペースを入れません=

残りの部分については、これは壊れているように見えcdますが、スクリプト自体のディレクトリに移動し、現在のディレクトリを表示し、最後cdに最新の場所に戻って、標準出力をゴミ箱にcdリダイレクトしようとします(これは意味がありません。失敗したときの標準エラー、決してオンにならない)STDOUT/dev/nullcdSTDERRSTDOUT

これを適切な簡単な方法で実行したい場合:

apphome="$(dirname $0)"

必要なのはそれだけです。

ノート

バッククォート

`

古いスタイルのコマンド置換で使用されます。例:

foo=`command`

foo=$(command)

代わりに構文をお勧めします。$()内でのバックスラッシュの処理はそれほど驚くべきことではなく、$()はネストするのが簡単です。http://mywiki.wooledge.org/BashFAQ/082を参照してください

于 2012-10-31T03:49:00.880 に答える
-1

「apphome」変数にコマンドを割り当てているようです。このコマンドは後で実行できます。dirnameは、ファイル名のディレクトリ部分を返します。$ 0は、この行に含まれるスクリプトの名前です(私が間違っていない場合)。これで、実行するdirname <name>とディレクトリが返され、cdはその値を使用します。したがって、それぞれが成功すると仮定して、行に3つのコマンドを実行します。コマンドは次のとおりです。

cd`dirname[スクリプトの名前]`
pwd
CD -

最初のコマンドは、ディレクトリをスクリプトを含むディレクトリに変更します。2番目は現在のディレクトリを出力します。3番目は元のディレクトリに戻ります。3番目のコマンドの出力は印刷されません。要約すると、問題の行を含むスクリプトを含むディレクトリの名前が出力されます。少なくとも、これは私がそれを理解する方法です。

于 2012-10-31T04:02:22.807 に答える