wie verwenden von shell-script, in not_if Zustand
Will ich mit shell-Skript-Ausgabe zur Validierung der Ressource in der guard-Bedingung.Ich verwende untenstehenden code noch nicht arbeitet.
bash "stampDisksuccess" do
code <<-EOH
whoami
EOH
user 'root'
not_if {"`sudo sh /home/scripts/getStampedDisk.sh test`" == ''}
end
Ob Skript(getStampedDisk.sh) gibt leere Meldung oder einige Daten, bash Ressource wird immer ausgeführt. Wo ich gehe davon aus, dass es nicht ausgeführt werden soll, wenn das Skript gibt leere Daten.
Korrigieren Sie mich, wenn etwas fehlt.
- Was ist die Folge davon?
- bearbeitet meine Frage.. bitte prüfen.. ich bin nicht in der Lage zu verstehen, wie Koch arbeitet intern..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Let ' s sezieren:
{
Block öffnen"
string Eröffnung==
Betreiber''
ständige leere Zeichenfolge}
schließen blockierenDas ist eine Menge von Operationen zu testen, haben Sie einen leeren string. Die Ausgabe von den backticks ist nicht garantiert, dass er wirklich leer ist (es kann ein Zeilenumbruch zum Beispiel) und dann vergleichen Sie es mit einer beliebigen Zeichenfolge leer (nicht null, es ist ein string mit nichts). Es gibt viele Weg, es kann auch mal schlecht und es ist ziemlich schwer zu Debuggen, die nicht druckbare Zeichen.
Aber die Muscheln haben bereits einen Betreiber für diese, es ist
-z
für die üblichen bash.Zitieren bash-Dokumentation:
Anderen Helfer ist
$()
zu bewerten, einen Befehl in das SkriptLetzte die
[[ ]]
Bau zu sagen, wir verwenden einen operator und nicht als Befehl.Alle zusammen, Sie enden mit der Ausführung des Befehls Wache, ausgedrückt als string (Dokumentation über die Wachen hier)
Zitat aus der guard-Dokumentation:
Wenn Sie nicht mit ruby in der Wache, nicht mit einem block, Sie sind nur das hinzufügen von Schichten Hexe wird Sie in Schwierigkeiten bringen, insbesondere dann, wenn Sie versuchen zu vergleichen, die nicht gedruckt oder leere Zeichenfolgen, und es ist schwieriger zu Debuggen, versuchen Sie kleben mit den standard-shell-Befehle wenn Sie benötigen, rufen Sie einen Befehl oder ein Skript, können Sie es testen in der Konsole und sicher sein, es ist nicht das problem später.
$()
zu geben-z
die Ausgabe von deinem Befehl und nicht den text des Befehls selbst. Ich bearbeitet meine Antwort zu korrigieren, dies auch.'
durch doppelte Anführungszeichen"
- und ruby-interpolation wird die Arbeit in der Linie. (Denke, die Annahme, die Antworten auf Ihre Fragen, wenn Sie Ihr problem lösen)