2016-11-08 8 views
1

У меня есть скрипт bash, который выполняет некоторые задания. Иногда я хочу иметь возможность запускать эти задания с nice, чтобы снизить их приоритет на сервере.Как добавить `nice` переключатель в мой скрипт bash

Например, если мой исполняемый файл a.out, я могу запустить с терминала nice a.out, чтобы снизить приоритет работы.

В моем сценарии bash у меня есть переменная NICE. Я один из следующих 2-х вещей:

# either nice is set 
NICE="nice" 

# or it is left unset 
NICE="" 

Я затем запустить свою работу, используя

"$NICE$ ./a.out 

в сценарии.

Это работает, когда NICE="nice", однако, не работает, если NICE осталось в комплекте NICE="".

Один из способов обойти это использовать, если заявление:

if [ "$NICE" == "nice" ] 
then 
    nice ./a.out 
else 
    ./a.out 
fi 

Но это становится 5 или 6 строк кода, а не только одну строку.

Возможно ли выполнить то, что я пытался использовать NICE в качестве переменной, чтобы запустить исполняемый файл с тонкостью или без какой-либо симпатии?

+1

Удалить цитаты: '$ NICE ./a.out' – user000001

+2

или просто поместите '#renice -10 $$' в начале скрипта, чтобы вы могли удалить конечный '#' в любое время. –

+0

Я сомневаюсь, что '' $ NICE $./A.out' "работает". –

ответ

1

Ваша первая предпосылка почти справа.

На странице Баш человек (курсив мой):

Явные нулевые аргументы («» или «») сохраняются и передаются в команды , как пустые строки. Исправлены неявные неявные нулевые аргументы, возникающие из-за расширения параметров, не имеющих значений, . Если параметр без значения раскрывается в двойных кавычках, нулевой аргумент и сохраняется и передается команде в виде пустой строки. Когда цитируемый нулевой аргумент появляется как часть слова, расширение которого не равно null, нулевой аргумент удаляется. То есть, слово -d '' становится -d после разделения слов и удаления нулевых аргументов.

Так что для вашего дела, вы можете просто удалить кавычки:

$NICE ./a.out 

, который, в зависимости от значения $NICE, будет расширяться до следующей команды из двух слов:

'nice' './a.out' 

или одно слово:

'./a.out' 

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

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

  • Нет связанных вопросов^_^