在bash中从提示符写入输出文件

时间:2017-11-02 16:13:32

标签: linux bash

我一直在编写一些脚本,并拍了一个简短的快照,想分享一下是否有人可以提供帮助。我基本上使用提示来执行我的脚本。第一个提示将询问我是否要继续,哪个工作正常,第二个提示将问我是否要将输出写入txt文件,这也正常。但是我的问题是,如果有一种方法告诉脚本以某种方式将输出写入txt文件,当我点击是,但更有可能是否有办法在不重复我的命令的情况下执行此操作?我知道我可以将所有命令写入输出提示符,并且如果我点击是或否,它将写入或跳过写入。

#!/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 个答案:

答案 0 :(得分: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

允许用户指定输出文件名而不是硬编码文件&#39;输出脚本&#39;可能更清晰,我强烈建议不要提示;将这种事物指定为命令行参数会更清晰。

当然,如果您不想将输出复制到当前标准输出和文件,这更简单:

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

将导致所有后续命令的输出写入output-file

另外,如果您正在使用bash,那么运行T恤也会更简单:

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