Поврежденный ПУТЬ в CentOS 5.x

Kevin уже нашел базовую проблему, а именно, что Вы называете свой собственный сценарий рекурсивно.

Простой способ избежать этого состоит в том, чтобы назвать перенесенную программу с полным путем. Более необычный путь состоит в том, чтобы исследовать $PATH вручную и пропуск Ваш собственный сценарий (как определено с $0).

find_command () {
  script_dir={1%/*}; command_name=${1##*/}
  real_command=
  IFS=':'; set +f
  for d in $PATH; do
    if [ "$d" = "$script_dir" ]; then continue; fi
    if [ -x "$d/$command_name" ]; then real_command="$d/command_name" break; fi
  done
  set -f; unset IFS
  [ -n "$real_command" ]
}
find_command "$0" || {
  echo 1>&2 "$0: cannot find underlying command in \$PATH=$PATH"
  exit 2
}
exec "$0" -m32 "$@"

Некоторые дополнительные подсказки:

  • Использовать exec если Вам не нужна оболочка еще, после того как Вы запустили реальную команду. Некоторые оболочки знают, чтобы сделать это как оптимизацию, но не все.
  • Использовать #!/bin/sh вместо #!/bin/bash если Вы не используете функции удара. Во многих системах, sh более минимизированная, более быстрая оболочка, чем bash, с меньшим количеством функций, но сценариями обертки редко нуждаются в этих расширенных функциях.

1
12.06.2012, 01:40
1 ответ

PATH настроен в /etc/profile, соответствующие файлы в /etc/profile.d/*, ~/.bashrc и ~/.bash_profile для оболочек удара и подобных файлов для других оболочек.

Не ясно из Вашего вопроса, что точная последовательность имеет команды, которые Вы выполнили, но если Вы изменили PATH прежде, чем возрасти для укоренения, который не будет иметь никакого эффекта.

Если Вы возрастаете для укоренения для выполнения этих команд, необходимо предоставить нам PATH когда Вы открыли корневую оболочку и оболочку, пользователь root использует.

1
27.01.2020, 23:54

Теги

Похожие вопросы