Использование команды hash - PullRequest
6 голосов
/ 13 мая 2011

Я работаю над небольшим приложением, основанным на ffmpeg, и прочитал учебник , созданный для ubuntu , в котором они советуют использовать команду hash для созданного исполняемого файла.

Меня интересует эта команда, вы когда-нибудь ее использовали?Для каких целей?

Когда я запускаю его в исходной папке, я получаю это (после компиляции)

$ hash
hits    command
   1    /usr/bin/strip
   1    /usr/local/bin/ffmpeg
   1    /usr/bin/svn
   4    /usr/local/bin/brew
   2    /usr/bin/git
   1    /bin/rm
   1    /bin/cat
   1    /usr/bin/ld
   1    /bin/sh
   4    /usr/bin/man
   5    /usr/bin/make
   4    /usr/bin/otool
  15    /bin/ls
   6    /usr/bin/open
   2    /usr/bin/clear

Похоже на сводку моей истории bash_ *

КогдаЯ запускаю его в исполняемом файле, у меня не отображается много строк, и в этом приложении ничего не меняется?

$ md5 ffserver
MD5 (ffserver) = 2beac612e5efd6ee4a827ae0893ee338
$ hash ffserver
$ md5 ffserver
MD5 (ffserver) = 2beac612e5efd6ee4a827ae0893ee338

Когда я ищу человека, он просто говорит, что это встроенная функция.Действительно полезно:)

Это работает (скажем, Существует ) в Linux и MacOSX .

Ответы [ 2 ]

11 голосов
/ 13 мая 2011

hash на самом деле не ваша история; это встроенная оболочка bash(1), которая поддерживает хэш-таблицу недавно выполненных программ:

Bash использует хэш-таблицу для запоминания полных путей к исполняемым файлам (см. Хеш под разделом SHELL BUILTIN COMMANDS ниже). Полный поиск по каталогам в PATH выполняется только в том случае, если команда не найдена в хеш-таблице.

(от bash(1).)

Руководство, которое вы нашли, возможно, предложило запустить его, просто чтобы посмотреть, какая команда ffmpeg будет выполнена на следующем шаге; возможно, есть программа ffmpeg, поставляемая дистрибутивом, и они хотели убедиться, что новая программа будет выполнена вместо поставляемой дистрибутивом, если вы просто набрали ffmpeg в оболочке.

Это кажется растяжкой, потому что также потребует наличия каталога, содержащего новый ffmpeg в PATH до версии, предоставленной дистрибутивом, и нет никакой гарантии этого.

9 голосов
/ 03 июня 2011

Если вы используете команды, которые могут быть не установлены в системе, проверьте их наличие и сообщите пользователю, что отсутствует. От Сценарии со стилем

Пример:

NEEDED_COMMANDS="sed awk lsof who"

missing_counter=0
for needed_command in $NEEDED_COMMANDS; do
  if ! hash "$needed_command" >/dev/null 2>&1; then
    printf "Command not found in PATH: %s\n" "$needed_command" >&2
    ((missing_counter++))
  fi
done

if ((missing_counter > 0)); then
  printf "Minimum %d commands are missing in PATH, aborting" "$missing_counter" >&2
  exit 1
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...