marinux
Goto Top

Bash quotingproblem: command in command

HAllo,

folgendes Konstrukt:

#!/bin/bash
TMP="$(timeout ${EXE_TIME} ssh root@${RM_IP} "pkill -f ${RM_DIR}/prog -s ${LC_IP}; ${RM_DIR}/prog -s ${LC_IP}"|grep info)"  
echo ${TMP}

Es soll ein Programm über ssh auf einem entfernten Rechner gestartet und eine Info damit ausgelesen werden. Da dies crashen kann, ist ein timeout vorgeschaltet. Bevor auf dem entfernten Rechner das Programm mit seinen Argumenten gestartet wird, soll versucht werden es zu killen, sofern es mit den selben Argumenten schon geöffnet ist.

Dabei schleicht sich aber ein Quoting-Problem ein. pkill versucht nun auf dem entfernten Rechner mit -f ${RM_DIR}/prog das Programm zu finden. Das -s interpretiert pkill als eigenes Argument.

Kann mir jmd. helfen, damit pkill als Suchmuster "${RM_DIR}/prog -s ${LC_IP}" verwendet?

Gruß

Marinux

Content-Key: 208446

Url: https://administrator.de/contentid/208446

Printed on: April 25, 2024 at 12:04 o'clock

Member: Lochkartenstanzer
Lochkartenstanzer Jun 21, 2013 updated at 14:10:50 (UTC)
Goto Top
Zitat von @marinux:
Kann mir jmd. helfen, damit pkill als Suchmuster "${RM_DIR}/prog -s ${LC_IP}" verwendet?


Hast Du verscucht, "${RM_DIR}/prog -s ${LC_IP}" in quotes die Du durch backslash escapest zu setzen udn dann pkill zu übergeben?

Etwa so ähnlich:
MP="$(timeout ${EXE_TIME} ssh root@${RM_IP} "pkill -f  \"${RM_DIR}/prog -s ${LC_IP}\" ; ${RM_DIR}/prog -s ${LC_IP}"|grep info)"

ggf. mußt Du daß über mehrere Stufen machen.

lks
Member: marinux
marinux Jun 21, 2013 at 14:28:12 (UTC)
Goto Top
Hi,

das funktioniert. Nur gefühlt habe ich genau das Gleiche heute schon 100x ausprobiert...

Manchmal ist der Wurm drin.

Danke und Gruß
Member: Lochkartenstanzer
Lochkartenstanzer Jun 22, 2013 at 19:57:31 (UTC)
Goto Top
Zitat von @marinux:
das funktioniert.

schön.

Nur gefühlt habe ich genau das Gleiche heute schon 100x ausprobiert...

Es gibt aso Tage, da ...

... ist der Wurm drin.

Manchmal sieht man den Wald vor lauter Bäumen nicht. Da muß man einfach mal jemand anderen draufschauen lassen.

Danke und Gruß

gern geschehen.