Сценарии оболочки и команда md5 / md5sum: необходимо решить, когда использовать какой - PullRequest
2 голосов
/ 19 августа 2011

Постер с первого раза, вот, так что будь осторожен со мной.:)

Я уверен, что никто еще не задавал этого вопроса при исследовании этого вопроса.

Короткая версия: Как я могу сказать сценарию оболочки использовать одну команду против другой, в зависимости от того, в каком окне я запускаюсценарий оболочки включен?Пример: в Box 1 я хочу запустить md5 file.txt.На Box 3 я хочу запустить md5sum file.txt.Я думаю, что это команда IF, где, если вывод md5 является ошибкой, используйте md5sum вместо этого.Просто не знаю, как проверить и посмотреть, является ли вывод md5 ошибочным или нет


Длинная версия: у меня есть 3 коробки, с которыми я работаю.Ящики 1 и 3 являются получателями файла из ящика 2, и они получают файл, когда я вызываю скрипт в ящике 1/3, следующим образом: ftpget.sh file.txt

У меня есть сценарий оболочки, который выполняет FTPGET и получает файл из Box 2. Затем он делает md5 для исходного файла из Box 2 и файла назначения, который будет на Box 1 или 3, в зависимости от того, из какого я выполнил скрипт.Конечно, хэши должны совпадать.

Проблема заключается в следующем: код написан для использования md5, и в то время как в Box 1 используется md5, в Box 3 используется md5sum.Поэтому, когда я выполняю скрипт из Box 1, он прекрасно работает.Когда я выполняю сценарий из Box 3, он терпит неудачу, потому что Box 3 использует md5sum, а не md5.

Итак, я подумал: как лучше всего справиться с этим?Я ничего не могу установить, так как я не администратор, и люди, которые управляют машиной, вероятно, не сделают это для меня в любом случае.Могу ли я просто создать псевдоним в моем .profile, который выглядит примерно так: alias md5="md5sum"?Таким образом, когда скрипт запускается на Box 3, он будет выполнять md5 file.txt, но система действительно выполнит md5sum file.txt, так как я создал псевдоним.

Мысли?Лучшие идеи?:)

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Я не знаю, какую оболочку вы используете. Это для Bash:

#!/bin/sh
md5=$(which md5)
if [ ! "${md5}" ] ; then
  md5=$(which md5sum)
  if [ ! "${md5}" ] ; then
    echo "neither md5 nor md5sum found"
    exit 1
  fi
fi
${md5} $0
1 голос
/ 19 августа 2011

Есть много возможных решений, как это часто бывает.Возможно, будет достаточно следующего сценария с именем somesum (1) ...

#!/bin/sh
# ident "@(#)somesum.sh: Find a command to do a checksum of a file"
################################################################################
export CMD
CMD=''
# if can find the command in the search path and CMD is not set,
# set CMD to the command name ...
[ "$CMD" = '' -a -f "`which md5    2>/dev/null`" ]  && CMD=md5
[ "$CMD" = '' -a -f "`which md5sum  2>/dev/null`" ]  && CMD=md5sum
################################################################################
# if command was found execute it else complain could not find desired commands
if [ "$CMD" != '' ]
then
   $CMD $*
else
   echo could not find md5sum or md5 1>&2
fi
exit

Или установка предпочтительной команды на других платформах в вашем собственном пути поиска;или используя команду hostname (1), чтобы выяснить, на какой платформе вы находитесь.Я предполагаю, что вы находитесь на платформе, в которой есть пример оболочки Bash (или ksh / pdksh / bash / ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...