2016-10-07 4 views
-1

ich einen Bash-Skript habe, das richtig in meinem System läuft:Syntaxfehler in der Nähe von unerwartetem Token `<<<‘

uname -a 
Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux 

Aber ich brauche es in einem Redhat 7.2 chroot zu arbeiten:

Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 unknown 

Derselbe Code wird auf der ersten korrekt ausgeführt, aber wenn er unter 7.2 ausgeführt wird, erkennt er zuerst nicht sed -i (nur das Argument -i). Kommentierte einige Linien y laufen in ein anderes Problem:

bash: command substitution: line 1: syntax error near unexpected token `<<<' 

Die Sache ist, dass dieses Skript müssen in einem Remote-Rechner mit einem debian ausgeführt werden 7.2 (deshalb teste ich es in einer chroot mit dem gleichen Distro), also ist es keine Lösung, Module/Upgrades zu installieren, um es lauffähig zu machen.

Ein Beispielcode:

#!/bin/bash  
... 
count=0                                  
while read line; do                               
    if echo "$line" | grep -q ')'                           
    then                                  
     ((count++))                               
     comas=`grep -o "," <<< "$line" | wc -l`                        
     num=`grep -o "byRef" <<< "$line" | wc -l` 
... 
sed -i 's/shortInteger/int/g' "test.h" 

Irgendwelche Ideen?

Danke.

Edit: Dies sind die Befehle, die mir Probleme verursachen:

comas = `grep -o "" < < < "$ line" | WC -l`

sed -i 's/Shortinteger/int/g' "test.h"

Edit 2:

GNU bash, Version 2.05.8 -> "hier string" (< < <) existiert nicht

grep (GNU grep) 2.4.2 -> Option -o nicht

GNU existiert sed Version 3.02 -> -i op tion existiert ich es mit dem folgenden ... nicht

+0

Wenn Sie Zeilennummern in Ihrem Code auf Fehler zeigen, müssen Sie das vollständige Skript anzeigen, sonst ist es nutzlos. – Inian

+0

@Inian Der Code ist zu lang, um hier gepostet zu werden, und ich sollte viele Worte ändern, um den Datenschutz zu wahren. Im Beispiel zeige ich die zwei Zeilen, die die Fehler werfen. Ich werde den Beitrag bearbeiten, um sie zu verstehen. – Joster

+0

Sind Sie sicher, dass Ihre Chroot eine große Ähnlichkeit mit Ihrem Zielsystem hat? Das sieht so aus, als ob du etwas nicht wirklich bash verwendest und nicht wirklich ein sed, vielleicht eine busybox oder sowas? –

Antwort

0

Schließlich bekam

Für die Versionen habe ich, die ich kann nicht aktualisiert werden:

sed Lösung

sed 's/shortInteger/int/g' "test.h"> test.temp.h;

mv "test.temp.h" "test.h"

Dies wurde von @sorontar hingewiesen. Danke vielmals!

Um Sonderzeichen oder Teilstrings in einem String

comas = $ (echo "$ line" | tr "" "\ n" | grep -c "") zu finden

Laut meinen Quelldateien gibt es ein Muster, also habe ich nach jedem Komma ein Leerzeichen. So trennt tr " " "\n" Teilstrings zwischen Leerzeichen Zeilenwechsel, dann kann ich grep -c "," verwenden, um jede Zeile mit einem Komma darin zu zählen.

+1

Wenn Sie Kommas zählen möchten, ist es wahrscheinlich direkter, 'tr -dc, | wc-c' –

+0

@WilliamPurell danke. das funktioniert auch und ist schlauer – Joster

Verwandte Themen