2013-12-01 2 views
2

Я хотел написать функцию таймера гибернации, используя systemctl hibernate и привилегии root.Запись таймера спящего режима с использованием systemctl hibernate

Это моя функция:

hibernate-timer() { 
    sudo bash -c 'echo "System is going to hibernate in $1 minute(s)..." 
    sleep $1m 
    systemctl hibernate' 
} 

При запуске, например hibernate-timer 50, я бы ожидать, что система в спящий режим через 50 минут. Однако появляется следующее сообщение об ошибке: sleep: invalid time interval ‘m’.

Может ли кто-нибудь сказать мне, как я могу написать таймер спящего режима, используя привилегии root?

+0

Читайте информацию о спящем теге. Это не то, что вы думаете, и не подходит для вашего вопроса. –

ответ

1

Вы забыли передать параметр в bash -c после одинарные кавычки:

hibernate-timer() { 
    sudo bash -c 'echo "System is going to hibernate in $1 minute(s)..." 
    sleep $1m 
    systemctl hibernate' -- $1 
} 

Обратите внимание на -- $1 я добавил ближе к концу. Без этого команда в bash -c не получает никаких аргументов командной строки, поэтому значение $1 внутри команды пуст, поэтому вместо sleep 50m команда становится sleep m, которая не будет работать.

От человека странице:

--  A -- signals the end of options and disables further option 
      processing. Any arguments after the -- are treated as file‐ 
      names and arguments. 

Это как -- $1 там получает передается в качестве аргумента для команды в bash -c '...'

+0

Спасибо janos. Вы сами пробовали? Для меня это не работает и представляет мне то же сообщение об ошибке, что и выше. – orschiro

+0

@orschiro мой плохой, см. Мой обновленный ответ. – janos

+0

Теперь он отлично работает. Огромное спасибо! Что делает '--' в этом контексте и почему он не может быть пропущен? – orschiro

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