上篇我们讲了文件描述符还有自定义文件描述符,补充一下如何关闭自定义的文件描述符
语法:exec 描述符>&-
案例,在实际项目中为了预防错误会灵活控制描述符的启用/禁用:
#!/bin/bash
#自定义输出描述符
exec 3> fileContent.sh
#写入一句话道文件中
echo "我是程序员" >&3
#关闭文件描述符 ,关闭之后将无法继续使用该描述符
exec 3>&-
#打印文件内容
cat fileContent.sh
#重新打开
exec 3> fileContent.sh
#向文件写入内容
echo "但是我喜欢装逼" >&3
Shell创建临时文件及文件夹
语法:mktemp 文件名.X(此处可以跟若干个X且必须大写),可创建一个唯一的文件
在终端运行:
mktemp test.XXX
此时当前目录下会生成一个文件,其后缀名是随机且唯一的
在实际代码中,我们会将shell命令直接写入脚本,同时向该文件写入内容,如下:
#!/bin/bash
#创建临时文件
tempfile=$(mktemp testfile.XXXXXX)
#重定向临时文件
exec 3> $tempfile
#打印文件名称
echo "文件名称:$tempfile"
#输出文件内容
echo "我是程序员" >&3
echo "我有梦想" >&3
echo "你呢" >&3
#关闭文件
exec 3>&-
#打印文件内容
echo "文件内容:"
cat $tempfile
#删除文件
rm $tempfile
当然这种临时存储数据的文件应该及时删除,不如把删除的任务交给系统,这里可以在系统的临时目录下去创建临时文件,由系统去帮你清理
语法:mktemp -t 文件名.X(格式跟普通创建临时文件一致,多了一个‘-t’参数)
创建临时目录
语法:mktemp -d 文件夹名称(后面可根后缀,格式和创建临时文件一致,且唯一)
相信很多同学在迅雷下载或者百度云下载 等下载前会在下载目录创建一个临时文件夹,类似于:学习资料.xfsdferxc,其实他就是使用了创建临时目录的方法,为了避免命令重复,所以使用了随机后缀。
ps:在实际使用中,可能存在既要在控制台输出又要将操作日记记录在文件中情况,我们可以使用一下方式处理:
echo "我要输出到控制台和文件" | tee fileContent.sh
网友评论