第4章 处理用户输入与显示数据------------(创建本地临时文件、在/temp中创建临时文件、创建临时目录、tee命令)
2017-04-22 00:00
1051 查看
4.6 使用临时文件
Linux系统保留了一个特殊的目录位置,以供临时文件使用。Linux使用/tmp目录处理不需要永久保存的文件。大部分Linux发行版的系统配置都是在启动时自动删除/tmp目录中的任何文件。系统上的任何用户账户都有读取和写入/tmp目录中的文件的权限。该特性可以帮助用户轻松创建临时文件,而无需担心它们的清理问题。创建临时文件:mktemp命令可以轻松在/tmp文件夹中创建一个唯一的临时文件。shell创建该文件但是不使用默认的umask值。相反,它仅向文件所有者分配读取和写入权限,并使用户成为文件的所有者。创建文件之后,可以脚本对文件进行完整权限的读取和写入,但其他人都不能访问它。
4.6.1 创建本地临时文件
默认情况下,mktemp在本地目录创建文件。要使用mktemp命令在本地目录中创建临时文件,只需要指定一个文件名即可。模块包括文本文件以及附加到文件名后的6个XXXXXX。mktemp命令使用一个6字符代码替换6个XXXXXX,以确保文件名在目录中的唯一性。可以创建多个临时文件,每个文件确保是唯一的。可以看出,mktemp命令的输出是它们创建的文件的名称。在脚本中使用mktemp命令时,需要使用一个变量保存该文件名,以便稍后再脚本中引用。
#!/bin/bash #创建临时文件,然后对临时文件进行读写 tempfile=`mktemp test.XXXXXX` #创建文件输出描述符号 exec 3>$tempfile echo "对临时文件$tempfile进行写操作" #对临时文件进行写操作 echo " 《静夜诗》" >&3 echo " 李白" >&3 echo "床前明月光,疑是地上霜。" >&3 echo "举头望明月,低头思故乡!" >&3 #关闭文件输出描述符 exec 3>&- echo "临时文件的内容" #创建文件输出描述符号 exec 3<$tempfile count=1 #对临时文件进行读操作 while read line <&3 do echo "第$count行:$line" count=$[ $count +1 ] done #关闭文件输出描述符 exec 3<&- echo "删除临时文件:$tempfile,禁止错误信息的输出!" rm -rf $tempfile 2>/dev/null
该脚本使用mktemp命令创建一个临时文件,并将文件名分配给$tempfile变量。然后使用临时文件作为文件描述符3的输出重定向文件。然后关闭临时文件输出描述符。然后创建临时文件输入描述符3,对临时文件进行读取。读取完成然后关闭文件输入描述符。最后,使用rm命令删除创建的临时文件并禁止错误信息输出!
4.6.2 在/temp中创建临时文件
-t选项强迫mktemp在系统的/temp文件夹中创建临时文件。但使用该选项时,mktemp命令返回用于创建临时文件的完整路径名,而不是文件名。由于mktemp命令返回完整路径名,因此可以从Linux系统的任何目录引用临时文件,无论系统将临时目录放在哪个位置。#!/bin/bash #在/tmp路径下创建一个临时文件 tempfile=`mktemp -t tmp.XXXXXX` #向临时文件中写入数据 echo "This is a tmp file">$tempfile #向临时文件追加数据,不覆盖原有数据 for (( i=1;i<=9;i++ )) do for(( j=1;j<=9;j++)) do [ $j -le $i ] && echo -n "$i * $j= $[ $i * $j ] " done echo " " done >>$tempfile echo "临时文件$tempfile位于:$tempfile" filename=`basename $tempfile` echo $filename echo "显示临时文件中的内容" cat $tempfile rm -rf $tempfile 2>/dev/null
4.6.3 创建临时目录
-d选项让mktemp命令创建一个临时目录而不是一个文件。4.6.4 记录消息
有时候有必要将输出同时发送到监视器和日志文件。这种情况下不需要使用两次重定向,只需要使用特殊命令tee命令即可。tee命令就像管道的T型接头。它将STDIN的数据同时发送到两个目的地。一个是STDOUT,另一个是tee命令指定的文件名:tee filename。
由于tee重定向来自STDIN的数据,因此可以与管道命令配置使用重定向任何命令的输出。默认情况下,tee命令每次使用时都会覆盖输出文件。如果希望向文件添加数据,必须使用-a选项。使用这种技术,可以将数据保存在文件中,同时将数据显示在监视器上供用户查看。tee命令参数:
tee操作实例:
#!/bin/bash #创建一个临时文件 tempfile=`mktemp tmp.XXXXXX` #在显示屏上输出信息,同时把信息输出到临时文件 echo "This is a tmp file"| tee $tempfile #在显示屏上输出信息,同时把信息输出到临时文件 #且不覆盖原有的数据 echo "Hello ,ewang!" | tee -a $tempfile echo "What can I do for you?" | tee -a $tempfile echo "临时文件名:$tempfile" #显示临时文件中的内容 echo "显示临时文件中的内容" cat $tempfile #删除临时文件并不输出错误信息 rm -rf $tempfile 2>/dev/null
即可以永久保存输出副本的同时,也能将输出结果显示给用户。
相关文章推荐
- 第4章 处理用户输入与显示数据------------(创建本地临时文件、在/temp中创建临时文件、创建临时目录、tee命令)
- 第4章 处理用户输入与显示数据------------(创建本地临时文件、在/temp中创建临时文件、创建临时目录、tee命令)
- 第4章 处理用户输入与显示数据------------(禁止命令输出、lsof命令、关闭文件描述符、创建读取/写入文件描述符)
- 第4章 处理用户输入与显示数据------------(禁止命令输出、lsof命令、关闭文件描述符、创建读取/写入文件描述符)
- 第4章 处理用户输入与显示数据------------(禁止命令输出、lsof命令、关闭文件描述符、创建读取/写入文件描述符)
- 第4章 处理用户输入与显示数据------------(默读与文件读取)
- 第4章 处理用户输入与显示数据------------(getopt命令)
- 第4章 处理用户输入与显示数据------------(从键盘输入的命令read,对输入计时计数)
- 第4章 处理用户输入与显示数据------------(getopt命令)
- 第4章 处理用户输入与显示数据------------(getopt命令)
- 第4章 处理用户输入与显示数据------------(更高级的getopts命令、标准化选项)
- 第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)
- 第4章 处理用户输入与显示数据------------(默读与文件读取)
- 第4章 处理用户输入与显示数据------------(从键盘输入的命令read,对输入计时计数)
- 第4章 处理用户输入与显示数据------------(更高级的getopts命令、标准化选项)
- 第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)
- 第4章 处理用户输入与显示数据------------(默读与文件读取)
- 第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)
- 第4章 处理用户输入与显示数据------------(更高级的getopts命令、标准化选项)
- 第4章 处理用户输入与显示数据------------(移位shift、命令行参数选项)