I/O重定向问题

huayangshiboqi 2018-04-12 11:38:58
shell脚本:test内容:
function_testOne()
#这个shell函数用于测试shell函数的输入重定向、文件内容读取及输出重定向
{
read a b c #用于读取输入重定向到函数的文件内容
echo "输出测试${a}"
echo ${b}
echo "string">>test6 #这一句没有输出到文件
# echo "string"> test6 #和上一句进行比较。这一种把前两句输出到test6文件的内容删了,后面输出内容正常
echo ${*} #没有输出
echo ${1} #没有输出
ls –y #错误命令行
echo "hello">>test6 #test6可以被写入,并且是在文本最后写入
} 1>test6 2>&1 #函数输出重定向到test6

function_testOne <test3

执行shell脚本:bash test

输入:test3文件里面的内容为:1 2 3
输出: test6文件的内容是:
输出测试1
2
【这是一个空行】
【这也是一个空行】
ls: invalid option -- 'y'
Try 'ls --help' for more information.
hello


问题,echo "string">>test6这一句为什么没有输出?
echo "hello">>test6 内容为什么是写在test6文件的最后?
test6文件的打开周期是对应程序执行的哪一段?如果是整个函数执行的这段时间,test6均是打开状态,那么,echo "hello">>test6为什么会被写入?已经打开的文件不是不能被写入了吗?
...全文
793 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huayangshiboqi 2018-04-16
  • 打赏
  • 举报
回复
引用 5 楼 cy309173854 的回复:
[quote=引用 3 楼 huayangshiboqi 的回复:] [quote=引用 1 楼 cy309173854 的回复:] 1.可以修改下脚本: > test6 &>>test6 #函数输出重定向到test6,把错误输出的位置等同于标准输出的位置,且追加输出 2.echo "hello">>test6 是把hello追加至test6里面,所以是最后一行。
非常感谢你的交流,简直是神级操作。 只是想问一下,&>>test6,结果是对的。用2>>test6测试了一波也不行,用&>>test6就可以。 但是,这种操作没见我这本书上有写啊,所以,为什么&>>test6就可以正常输出了呢?有什么原理,或者我可以参考一下什么吗? 问题2:看了一下命令的操作流程,在function_One函数执行过程中,test6一直是打开状态,所以,为什么在function_One函数中的一条语句还可以另外调用test6文件,并对它进行写操作呢?难道说,function_One函数中的语句和function_One函数使用的是同一个内存,共享内存后,就不存在另外打开这一说,而是直接写操作,对吗? [/quote] 因为&>>是io合并标准输出和错误输出的固定格式吧,我看的书就这几本,鸟哥私房菜,linux就该这样学,shell编程。[/quote] 好的,非常感谢
曹宇飞丶 2018-04-16
  • 打赏
  • 举报
回复
引用 3 楼 huayangshiboqi 的回复:
[quote=引用 1 楼 cy309173854 的回复:] 1.可以修改下脚本: > test6 &>>test6 #函数输出重定向到test6,把错误输出的位置等同于标准输出的位置,且追加输出 2.echo "hello">>test6 是把hello追加至test6里面,所以是最后一行。
非常感谢你的交流,简直是神级操作。 只是想问一下,&>>test6,结果是对的。用2>>test6测试了一波也不行,用&>>test6就可以。 但是,这种操作没见我这本书上有写啊,所以,为什么&>>test6就可以正常输出了呢?有什么原理,或者我可以参考一下什么吗? 问题2:看了一下命令的操作流程,在function_One函数执行过程中,test6一直是打开状态,所以,为什么在function_One函数中的一条语句还可以另外调用test6文件,并对它进行写操作呢?难道说,function_One函数中的语句和function_One函数使用的是同一个内存,共享内存后,就不存在另外打开这一说,而是直接写操作,对吗? [/quote] 因为&>>是io合并标准输出和错误输出的固定格式吧,我看的书就这几本,鸟哥私房菜,linux就该这样学,shell编程。
huayangshiboqi 2018-04-14
  • 打赏
  • 举报
回复
引用 1 楼 cy309173854 的回复:
1.可以修改下脚本: > test6 &>>test6 #函数输出重定向到test6,把错误输出的位置等同于标准输出的位置,且追加输出 2.echo "hello">>test6 是把hello追加至test6里面,所以是最后一行。
兄弟,可以给本书推荐吗,感觉我手上这本书好多东西没有,谢谢啦
huayangshiboqi 2018-04-14
  • 打赏
  • 举报
回复
引用 1 楼 cy309173854 的回复:
1.可以修改下脚本: > test6 &>>test6 #函数输出重定向到test6,把错误输出的位置等同于标准输出的位置,且追加输出 2.echo "hello">>test6 是把hello追加至test6里面,所以是最后一行。
非常感谢你的交流,简直是神级操作。 只是想问一下,&>>test6,结果是对的。用2>>test6测试了一波也不行,用&>>test6就可以。 但是,这种操作没见我这本书上有写啊,所以,为什么&>>test6就可以正常输出了呢?有什么原理,或者我可以参考一下什么吗? 问题2:看了一下命令的操作流程,在function_One函数执行过程中,test6一直是打开状态,所以,为什么在function_One函数中的一条语句还可以另外调用test6文件,并对它进行写操作呢?难道说,function_One函数中的语句和function_One函数使用的是同一个内存,共享内存后,就不存在另外打开这一说,而是直接写操作,对吗?
曹宇飞丶 2018-04-13
  • 打赏
  • 举报
回复
1.可以修改下脚本: > test6 &>>test6 #函数输出重定向到test6,把错误输出的位置等同于标准输出的位置,且追加输出 2.echo "hello">>test6 是把hello追加至test6里面,所以是最后一行。
骏马金龙 2018-04-13
  • 打赏
  • 举报
回复
在你的每个echo命令处先找到输出位置test6并打开,echo写入文件完成后,文件关闭。 你可以用strace命令跟踪下,看看具体如何

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧