2017-11-02 1 views
0

Ich habe an etwas Skript gearbeitet, und nahm einen einfachen kurzen Schnappschuss heraus und wollte teilen, um zu sehen, wenn jemand helfen könnte ,. Ich benutze grundsätzlich prompt, um mein Skript auszuführen. Erste Aufforderung wird mich fragen, ob ich fortfahren möchte, was gut funktioniert, zweite Aufforderung wird mich fragen, ob ich meine Ausgabe in txt-Datei schreiben möchte, was auch gut funktioniert. Aber meine Frage ist, ob es eine Möglichkeit gibt, dem Skript zu sagen, dass es die Ausgabe in die txt-Datei schreiben soll, wenn ich "Ja" drücke, aber eher, wenn es eine Möglichkeit gibt, dies zu tun, ohne meine Befehle zu duplizieren. Ich weiß, ich könnte einfach alle Befehle in die Ausgabeaufforderung schreiben, und abhängig davon, ob ich "Ja" oder "Nein" drücke, würde ich schreiben oder überspringen.Schreiben in Ausgabedatei von der Eingabeaufforderung in bash

#!/bin/bash 

# Disclaimer 
read -p "[Y] for Yes or [N] for GTFO: " prompt 
if [[ $prompt == "y" || $prompt == "" ]] 
then 

# Output save 
read -p "[Y] to save output to txt [N] don't save: " prompt 
if [[ $prompt == "y" || $prompt == "" ]] 
then 
    touch /root/Desktop info.txt 
    ifconfig >> /root/Desktop info.txt 

fi 
printf "\n" 
    printf "Executing script, and will scan the system for information \n" 
sleep 1.4 
printf "\n" 

# Will Check for IP 
printf "IP Addresses: \n" 
ifconfig 

else 
    printf "\n" 
    printf "Exiting, Bye \n" 

fi 

Antwort

1

Wenn Sie die Ausgabe des Skripts in eine Datei nur aufnehmen möchten, wenn der Benutzer anfordert, könnten Sie tun:

if [[ $prompt == "y" || $prompt == "" ]] 
then 
    trap 'rm $fifo' 0 
    fifo=$(mktemp) 
    rm $fifo 
    mkfifo $fifo 
    tee output-of-script < $fifo & 
    exec > $fifo # All output of any command run will now go to the fifo, 
        # which will be read by tee 
fi 

Es ist wahrscheinlich sauberer, damit der Benutzer eine Ausgabedatei angeben Name, anstatt die Datei 'output-of-script' hart zu codieren, und ich würde dringend von der Aufforderung abraten; Es ist viel sauberer, solche Dinge als Kommandozeilenargumente anzugeben.

Natürlich, wenn Sie nicht an den aktuellen stdout und die Datei kopieren möchten, ist dies viel einfacher:

if ...; then exec > output-file; fi 

die Ausgabe aller nachfolgenden Befehle werden dazu führen, output-file

geschrieben werden

auch, wenn Sie bash verwenden, können das T-Stück läuft einfacher sein, auch:

if ...; then exec > >(tee output-file); fi 
+0

das ist großartig! Vielen Dank für die Hilfe! Ich mag das – Petr

Verwandte Themen