2017-11-02 17 views
0

私はいくつかのスクリプトに取り組んでいて、簡単な短いスナップショットを出して、誰かが助けてくれるかどうかを共有したいと思っていました。基本的に私のスクリプトを実行するためにプロンプ​​トを使用しています。最初のプロンプトは私が続行したい場合は私に尋ねます。これはうまくいきます。txtファイルに出力を書きたいかどうかを尋ねる2番目のプロンプトが表示されます。しかし、私の質問は、私ははいを押すと、出力をtxtファイルに書き込むようにスクリプトに何とか指示する方法があれば、私のコマンドを複製せずにそれを行う方法があれば可能性が高いですか?私はすべてのコマンドを出力プロンプトに書き込むことができることを知っています。そして、私が「はい」または「いいえ」を押すかどうかに応じて、書き込みまたはスキップを行います。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 

答えて

1

あなたは、ユーザーがそれを要求した場合にのみ、ファイルへのスクリプトの出力を記録したい場合は、あなたができる:

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 

これは、ユーザーが出力ファイルを指定することができるように、おそらくクリーナーですスクリプトの出力ファイルをハードコーディングするのではなく、名前を指定する必要があります。私はプロンプトに対して強く勧めます。このようなことをコマンドライン引数として指定する方がはるかにクリーンです。もちろん

、あなたはこれがはるかに簡単です、現在の標準出力とファイルへの出力を複製したくない場合:

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

は、後続のすべてのコマンドの出力はoutput-file

に書き込まれるようになります

あなたbashを使っている場合にも、ティーを実行すると、あまりにも、単純になります

素晴らしいthatsの
if ...; then exec > >(tee output-file); fi 
+0

!助けてくれてありがとう!私はこれが好き – Petr

関連する問題