我一直在编写一些脚本,并拍了一个简短的快照,想分享一下是否有人可以提供帮助。我基本上使用提示来执行我的脚本。第一个提示将询问我是否要继续,哪个工作正常,第二个提示将问我是否要将输出写入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
答案 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