Ich habe das folgende ExecShellResult
Fragment in cfengine v2.2.1a:ExecShellResult nicht wie meine Pfeifen
control:
active_interface_mac = (ExecShellResult(/sbin/ifconfig ${active_interface} | /usr/bin/grep 'ether ' | /usr/bin/cut -f2 -d' '))
...
time_drift = (ExecShellResult(/usr/sbin/ntpdate -d pool.ntp.org 2>/dev/null | /usr/bin/grep -o 'offset.*sec' | /usr/bin/cut -f2 -d' '))
...
shellcommands:
"/bin/echo ${time_drift}" inform=true syslog=true
Wenn die oben von der Befehlszeile ausgeführt wird, funktioniert es offensichtlich gut:
$ ntpdate ...
0.183693
wenn jedoch innerhalb cfengine laufen, bekomme ich einen Syntaxfehler:
$ cfagent -qIK
Executing script /bin/echo /usr/bin/cut...(timeout=0,uid=-1,gid=-1)
cfengine:/bin/echo /usr/: /usr/bin/cut
cfengine: Finished script /bin/echo /usr/bin/cut
cfengine:
Executing script /bin/echo option requires an argument -- d usage...(timeout=0,uid=-1,gid=-1)
cfengine:/bin/echo opti: option requires an argument -- d usage
cfengine: Finished script /bin/echo option requires an argument -- d usage
cfengine:
Executing script /bin/echo cut -b list [-n] [file ...] cut -c list [file ...] cut -f list [-s] [-d delim] [file ...]...(timeout=0,uid=-1,gid=-1)
cfengine:/bin/echo cut : cut -b list [-n] [file ...] cut -c list [file ...] cut -f list [-s] [-d delim] [file ...]
cfengine: Finished script /bin/echo cut -b list [-n] [file ...] cut -c list [file ...] cut -f list [-s] [-d delim] [file ...]
Hinweis der Fehler bein Wird angezeigt, wenn der Befehl echo
unter shellcommands:
ausgeführt wird. Bis dahin wurde die ${time_drift}
Variable bereits ausgewertet, und das Ergebnis zeigt, dass wir die -d
Option falsch aufrufen und uns beschweren, dass wir nichts an -d
übergeben haben, was offensichtlich nicht wahr ist.
Dies ist verwirrend, weil ${active_interface_mac}
die gleiche Syntax verwendet und perfekt funktioniert.
Ich habe versucht, die zweite grep mit | tail -1 | sed 's///'
, eine andere grep -o [0-9]*.[0-9]
oder irgendetwas anderes, was ich denken konnte, einschließlich /usr/bin/cut -f1 -d'${spc}'
ersetzen. Ich kann anscheinend awk
nicht benutzen, weil cfengine $(NF)
als Klammern interpretiert, die ein Teil von ExecShellResult
sind, selbst wenn Escape.
Welche anderen Optionen habe ich, um meinen aktuellen Sekundenwert aus dem Ausgang ntpdate
zu extrahieren?