Sudo скрипт bash в profile.d

Используя RedHat 6, следующий скрипт находится в /etc/profile.d/my_custom_script.sh

function checkroot {
  if [ "$(whoami)" != "root" ]; then
    echo "Sorry, you are not root."
    return
  else
    echo "You've got the powah!"
  fi
}

как обычный пользователь и как пользователь root, команда checkroot выполняется, как и ожидалось.

Однако при запуске sudo checkroot либо как обычный пользователь с привилегиями sudo, либо как root, система отвечает sudo: checkroot: command not found

Команда успешно работает с sudo -i checkroot, однако я не хочу предоставлять эту опцию sudo. Что нужно изменить, чтобы это произошло?


person colsen    schedule 17.09.2013    source источник


Ответы (1)


Это невозможно, так как sudo не позволяет экспортировать функции через себя. Вместо этого вы можете сохранить функцию в файл сценария и запустить с ней sudo:

#!/bin/bash
function checkroot {
  if [ "$(whoami)" != "root" ]; then
    echo "Sorry, you are not root."
    return
  else
    echo "You've got the powah!"
  fi
}
checkroot

Бежать:

sudo bash script.sh

При желании вы можете просто разместить команды напрямую

#!/bin/bash
if [ "$(whoami)" != "root" ]; then
    echo "Sorry, you are not root."
else
    echo "You've got the powah!"
fi

Вы также можете поместить его в ~/.bashrc по своему усмотрению, чтобы он запускался каждый раз при вызове интерактивной оболочки.

person konsolebox    schedule 17.09.2013
comment
И я предполагаю, что оттуда я мог бы переместить скрипт в общесистемную папку bin и выполнить его как собственную команду, верно? - person colsen; 18.09.2013
comment
@colsen Да, ты можешь это сделать. Просто убедитесь, что вы добавили к нему разрешение на выполнение с помощью chmod. И /usr/local/bin предпочтительнее. - person konsolebox; 18.09.2013