
In meinem einfachen Awk-Skript rufe ich den Systembefehl auf
#!/bin/bash
Test='/home/software/Other/new (Applet)'
ls "${Test}"
var=$(ls "${Test}")
echo $var
awk -vTest="$var" 'BEGIN {
#some code that works
print "This is a test", Test
#command= "ls new (Applet)"
system ("ls " Test); }'
Das Problem ist der Fehler mit den ()'s
$./testhere.sh
/home/software/Andere/neu (Applet) /home/software/Andere/neu (Applet)
Dies ist ein Test /home/software/Other/new (Applet)
sh: -c: Zeile 0: Syntaxfehler in der Nähe von unerwartetem Token (' sh: -c: line 0:
ls /home/software/Other/new (Applet)'
Als ich den Teil so geändert habe, dass der Befehl als Zeichenfolge übergeben wird
command= "ls new (Applet)"
system (command);
Ich erhalte ähnliche Fehler:
$ ./testhere.sh
/home/software/Andere/neu (Applet)
/home/software/Andere/neu (Applet)
Dies ist ein Test /home/software/Other/new (Applet)
sh: -c: Zeile 0: Syntaxfehler in der Nähe von unerwartetem Token (' sh: -c: line 0:
ls new (Applet)'
Wie kann ich das umgehen?
Antwort1
system()
Sie müssen das Wort mit Leerzeichen in Anführungszeichen (mit "" oder '') setzen, für die Shell, die den Aufruf in awk implementiert : zB:
system ("ls '" Test "'");
oder
system ("ls \"" Test "\"");