Можно ли избежать использования `sudo` для возврата файлы, принадлежащие root?

Если вы хотите выйти из скрипта только при отсутствии какой-либо команды:

require() {
  local command not_found

  for command; do
    if ! command -v -- "${command}" > /dev/null 2>&1; then
      printf 'ERROR: Command not found: %s\n' "${command}" >&2
      ((not_found++))
    fi
  done

  if ((not_found > 0)); then
    printf 'ERROR: Missing commands: %d\n' "${not_found}"
    exit 1
  fi
}

Но если вы также хотите установить недостающие команды:

install_command_if_not_found() {
  local command commands not_found

  for command; do
    if ! command -v -- "${command}" > /dev/null 2>&1; then
      commands+=("${command}")
      ((not_found++))
    fi
  done

  if ((not_found > 0)); then
    sudo apt-get update
    sudo apt-get install -y -- "${commands[@]}"
  fi
}

Пример:

$ require cat foo curl bar mpv baz zenity
ERROR: Command not found: foo
ERROR: Command not found: bar
ERROR: Command not found: baz
ERROR: Missing commands: 3

Примечания:

  1. В приведенном выше коде используется специальный синтаксис -Bash.
  2. Учтите, что бывают случаи, когда имя команды и имя ее пакета различаются, поэтому вторая функция в этих случаях работать не будет.
1
04.02.2020, 01:21
1 ответ

Настройте задание root cron , после чего сценарий все равно будет запускаться от имени пользователя root. Чтобы получить доступ к корневому crontab, запустите sudo crontab -e.

4
28.04.2021, 23:25

Теги

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