.shファイルの "hash"コマンドを理解するのに問題があります。

.shファイルの

だから私はLinuxシステムにEtherpad liteをインストールしたいと思います。実行しようとするとエラーが発生します。

"node.jsをインストールしてください(http://nodejs.org)」

このコマンドは、which nodeノードjsへの正しいパスを提供します。それで、Etherpad Liteの.shファイルに行き、次のことを見つけました:

  #Is node installed?
  hash node > /dev/null 2>&1 || { 
  echo "Please install node.js ( http://nodejs.org )" >&2
  exit 1 
}

私の考えでは、これは次のことを意味すると思います。ノードを確認し、使用可能な印刷行がない場合は終了します。しかし、このコードは正確に何をしますか?ハッシングは何をしますか?この金額&はすべてどうなりますか>

誰でもこの3行を私に説明できますか?とても感謝します。

ベストアンサー1

Bashシェルにコマンドを入力すると、シェルは$ PATH変数全体でそのコマンドを見つけます。ハッシュは単に入力したコマンドとそのコマンドが見つかった場所のインデックスで、次にそのコマンドを見つける速度を上げるのに役立ちます。

メモ: @Anthonの答えハッシュが何であるかについての良い定義を提供します!

たとえば、引数なしでコマンドを実行すると、以前hashに見つかったコマンドのリストとそのコマンドが使用された回数(クリックなど)が表示されます。

% hash
hits    command
   2    /usr/bin/host
   1    /bin/more
   1    /home/saml/bin/autossh_mail.sh
   3    /usr/bin/zip
   2    /bin/rm
   2    /bin/date
   2    /usr/bin/vim
   1    /usr/bin/htop
   2    /bin/mv
   3    /bin/ps
   8    /usr/bin/ssh
   1    /usr/bin/yum
   1    /usr/bin/xfreerdp
   1    /bin/cp
   2    /bin/mkdir
   4    /usr/bin/man
   1    /usr/bin/gvim
   1    /usr/bin/unzip
   1    /usr/bin/w
   5    /usr/bin/nslookup
  51    /bin/ls
  15    /usr/bin/find

このコマンドは、hash node値がハッシュリストに存在するかどうかに応じてステータス値(0または1)を返します。

hash node私のリストにない

% hash node
bash: hash: node: not found
% echo $?
1

メモ:以前に実行したコマンドの状態は、環境変数に一時的に保存されます。$?。各コマンドの実行後に状態(0 =成功、1 =失敗)が配置される場所。

"cmd1" || { "cmd2" ... }構文はorステートメントです。ここで考えて/または論理から始めてください。つまり、最初のタスクを実行し、失敗した場合は2番目のタスクを実行し、それ以外の場合は2番目のタスクを実行しません。

より詳細な例:

% true && echo "1st cmd ret. 1" || echo "1st cmd ret. 0"
1st cmd ret. 1

% false && echo "1st cmd ret. 1" || echo "1st cmd ret. 0"
1st cmd ret. 0

1を返すとコマンドが失敗したことを意味し、0を返すとコマンドが正常に実行されたことを意味するため、論理は常に混乱します(少なくとも私にとっては)。

おすすめ記事