2013-09-17 2 views
1

Использование RedHat 6, следующий сценарий расположен в /etc/profile.d/my_custom_script.shSudo Баш скрипт profile.d

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

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

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

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

ответ

2

Это невозможно, поскольку 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 

Run:

sudo bash script.sh 

При желании вы можете JUSE поместить команды непосредственно

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

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

+1

И я предполагаю, что оттуда я смогу переместить скрипт в общесистемную папку bin и выполнить его как собственную команду, правильно? – colsen

+1

@colsen Да, вы можете это сделать. Просто убедитесь, что вы добавляете к нему исполняемые разрешения с помощью chmod. И '/ usr/local/bin' предпочтительнее. – konsolebox

Смежные вопросы