2016-04-22 3 views
0

Ich habe ein Skript das liest eine Parameterdatei, und wird einige Aktionen mit den Werten jeder Zeile in diesem Skript zu tun. Meine Eingabedatei enthält Leerzeichen als Trennzeichen.Unix-Skript Loop-Cat-Datei während Zeile lesen "Keine solche Datei oder Verzeichnis" Fehler

Die seltsame Sache ist, es funktioniert auf einer alten Version von Linux, aber nicht auf einer neueren Version.

#! /bin/ksh 
su root "cat /var/opt/OV/tmp/HPOV_gg.log" | while read Line 
do 
    echo "${Line}" 
done 

Error: bash: cat /var/opt/OV/tmp/HPOV_gg.log: No such file or directory

Der Fehler etwas hat OBV mit der neuen Linux-Version, Parsen der Katze Befehl in einer anderen Art und Weise zu tun.

Wie kann ich das beheben? Oder kann ich mein Skript neu schreiben, damit es mit dieser neuen Linux-Version funktioniert?

+1

Können Sie Ihre Frage bearbeiten, um die Ausgabe von 'su root" ls -l /var/opt/OV/tmp/HPOV_gg.log "'? –

+0

[elp000161 (root):/root] su root "ls -l /var/opt/OV/tmp/HPOV_gg.log" bash: ls -l /var/opt/OV/tmp/HPOV_gg.log: Nein Datei oder Verzeichnis Das war das Problem. Ich habe einen Parameter -c wie John vorgeschlagen hinzugefügt, jetzt funktioniert es. – Mathias1

Antwort

3

Es ist besser, sudo zu verwenden, um Befehle als root auszuführen. Es sind keine Anführungszeichen erforderlich, und der sudo-Zugriff kann über seine Konfigurationsdatei feingranular gesteuert werden.

sudo cat /var/opt/OV/tmp/HPOV_gg.log | while ... 

Nur damit Sie wissen, könnten Sie Ihren Befehl su beheben, indem su root -c "cat file" zu schreiben. Befehle müssen über die Option -c übergeben werden. Aber trotzdem ist Sudo besser.

Verwandte Themen