2016-11-08 3 views
1

Ich habe ein Bash-Skript, das einige Jobs ausführt. Manchmal möchte ich diese Jobs mit nice ausführen können, um ihre Priorität auf einem Server zu verringern.Wie man einen `nice` Schalter zu meinem Bash-Skript hinzufügt

Zum Beispiel, wenn meine ausführbare Datei a.out ist, kann ich vom Terminal nice a.out laufen, um die Jobpriorität zu senken.

In meinem Bash-Skript habe ich eine Variable NICE. Ich mache eine der folgenden zwei Dinge:

# either nice is set 
NICE="nice" 

# or it is left unset 
NICE="" 

ich dann meinen Job laufen

"$NICE$ ./a.out 

später im Skript.

Dies funktioniert, wenn NICE="nice" jedoch nicht funktioniert, wenn NICE auf NICE="" gesetzt bleibt.

Eine Möglichkeit, dies zu umgehen ist eine if-Anweisung zu verwenden:

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

Aber dies wird 5 oder 6 Zeilen Code, anstatt nur eine einzige Zeile.

Ist es möglich zu erreichen, was ich versuchte, NICE als Variable zu verwenden, um eine ausführbare Datei mit Nettigkeit oder ohne Nettigkeit zu starten?

+1

Entfernen Sie die Anführungszeichen: '$ NICE ./a.out ' – user000001

+2

oder einfach '#renice -10 $$' am Anfang des Skripts, so dass Sie die nachstehende '#' jederzeit entfernen können. –

+0

Ich bezweifle '' NICE $./A.out' "funktioniert". –

Antwort

1

Ihre erste Schätzung ist fast rechts.

Von der Bash-Manpage (Hervorhebung von mir):

Explicit null Argumente ("" oder '') zurückgehalten und weitergegeben als leere Zeichenfolgen auf Befehle. Nicht angeführte implizite Nullargumente, die sich aus der Erweiterung von Parametern ergeben, die keine Werte haben, werden entfernt. Wenn ein Parameter ohne Wert in doppelte Anführungszeichen expandiert wird, wird ein Nullargument generiert und beibehalten und an einen Befehl als leere Zeichenfolge übergeben. Wenn ein zitiertes Nullargument als Teil eines Worts angezeigt wird, dessen Erweiterung nicht null ist, wird das Nullargument entfernt. Das heißt, das Wort -d '' wird -d nach der Worttrennung und Null-Argument-Entfernung.

Also für Ihren Fall könnten Sie einfach die Zitate fallen:

$NICE ./a.out 

, die je nach dem Wert von $NICE an folgendem Zwei-Wort-Befehl erweitern:

'nice' './a.out' 

oder ein Ein-Wort-Befehl:

'./a.out' 

Sie können set -x verwenden, um diese Art von Erweiterung zu debuggen - es druckt die erweiterte Wortliste, so dass Sie sehen können, ob etwas fehlgeschlagen ist.

Verwandte Themen