2016-11-01 1 views
-4

Doing eine Zuordnung für Klasse, die mit Befehlen im Terminal durchgeführt werden muss. Ich habe eine Shell-Datei (temp1.sh) im Home-Verzeichnis erstellt und eine Shell-Datei (temp2.sh) in einem Ordner (randomFolder) erstellt. Wenn ich temp2.sh ausführen, muss ich die Anzahl der Zeichen in temp1.sh anzeigen. Ich muss den Befehl pipe verwenden, um dies zu erreichen.Benötigen Sie Hilfe mit dem Befehl pipe im Terminal (Linux/Shell-Datei)

Ich denke, ich muss das Verzeichnis in das Home-Verzeichnis wechseln dann öffnen Sie die Datei temp1.sh und verwenden Sie den wc -c Befehl, um die Zeichen anzuzeigen. Ich habe viele verschiedene Wege versucht, diese Aufgabe auszuführen und kann sie irgendwie nicht zum Laufen bringen. Jede Hilfe wäre willkommen. Ohne eine Pipe zu verwenden, kann ich es zum Laufen bringen, aber ich kann nicht scheinen, diese Befehlszeile richtig zu schreiben, während ich eine Pipe benutze.

Was ich bisher getan haben:

cd ~ 
touch temp1.sh 
chmod 755 temp1.sh 
echo 'This file has other commands that are not relevant and work' >> temp1.sh 
mkdir randomFolder 
cd randomFolder 
touch temp2.sh 
chmod 755 temp2.sh 
echo cd ~ | wc -c temp1.sh >> temp2.sh 

Diese letzte Zeile mir sagt, gibt es keine solche Datei „temp1.sh“, nachdem ich es laufen. Wenn ich nach Hause umleiten dann Typ wc -c temp1.sh, bekomme ich die gewünschte Ausgabe. Ich möchte, dass diese Ausgabe ausgeführt wird, wenn ich temp2.sh ausführen.

Beispiel ohne Rohr Befehl:

echo wc -c ~/temp1.sh >> temp2.sh 

Das gibt mir die gewünschte Ausgabe, wenn ich temp2.sh laufen. Allerdings muss ich dies während der Verwendung des Pipe-Befehls durchführen.

+2

Bitte zeigen Sie Ihre besten Bemühungen, und die Ausgabe erhalten Sie. Welche Befehle verwenden Sie in der Pipeline? Was bekommst du von 'sh -x temp2.sh'? Hilft Ihnen das, herauszufinden, was schief läuft? –

+0

Ich habe vielleicht 20 verschiedene Wege ausprobiert, daher bin ich mir nicht sicher, welches meine beste Leistung ist, haha. Ich habe versucht, echo cd ~/temp1.sh | wc -c >> temp2.sh – ZenMeng

+1

Nur 20? Du bist nicht sehr kreativ ... :). Bitte fügen Sie alles hinzu, was Ihrer Meinung nach in etwa in der Nähe Ihrer Frage liegt. Versuchen Sie, ein Skript zum Schreiben von 'temp2.sh' zu schreiben, damit Sie es ausführen und die Anzahl der Zeichen in' temp1.sh' ermitteln können? Wofür ist das Echo? Warum Umleitung wie '>> temp2.sh'?Denken Sie darüber nach, was Sie an der Terminal-Eingabeaufforderung eingeben würden. Schreiben Sie nun diese Befehle in die Datei 'temp2.sh' und führen Sie ' sh temp2.sh' aus. –

Antwort

0

Ihr Code ist in der Nähe zu arbeiten. Der erste Teil ist in Ordnung:

cd ~ 
touch temp1.sh 
chmod 755 temp1.sh 
echo 'This file has other commands that are not relevant and work' >> temp1.sh 
mkdir randomFolder 
cd randomFolder 
touch temp2.sh 
chmod 755 temp2.sh 

All dies sollte funktionieren. Sie Problem ist, dieser Teil:

echo cd ~ | wc -c temp1.sh >> temp2.sh 

Sie müssen die cd ~ von etwas zu trennen, die einen Befehl und die Ausgabe über Pipes an wc läuft, und in temp2.sh die ganze Menge gespeichert zu bekommen. Das könnte so etwas wie:

echo "cd $HOME" > temp2.sh 
echo "cat temp1.sh | wc -c" >> temp2.sh 

Der entscheidende Punkt ist hier über separate Leitungen für den cd Befehl und den Befehl wc. Die Verwendung von > für den ersten Befehl stellt sicher, dass Sie keinen Müll von früheren fehlgeschlagenen Versuchen in temp2.sh haben. Sie können das gleiche Ergebnis auf vielfältige Weise erreicht werden, einschließlich:

echo "cd; cat temp1.sh | wc -c" > temp2.sh 
echo "cd ~; while read -r line; do echo "$line"; done < temp1.sh | wc -c" > temp2.sh 

Und dann, endlich, müssen Sie temp2.sh auszuführen. Sie könnten einige davon verwenden, obwohl einige (welche?) Davon abhängen, wie Ihr PATH eingestellt ist:

./temp2.sh 
temp2.sh 
sh temp2.sh 
sh -x temp2.sh 
$HOME/randomFolder/temp2.sh 
~/randomFolder/temp2.sh