分页: 1 / 1
闲得无聊...研究脚本自修改
发表于 : 2013-07-26 13:53
由 liushengqi000
a.sh
echo ... > a.sh
echo ... >> a.sh
sed -i ... a.sh
cat a.sh|sed ...>a.sh
cat a.sh|sed ...>>a.sh
>> 基本都是文件追加,追加内容被执行
sed -i是文件被修改,执行内容不变
>为啥有时执行有时就没执行...sed>有时还会出意料外的文件结尾OTZ
Re: 闲得无聊...研究脚本自修改
发表于 : 2013-07-31 21:57
由 枫叶饭团
没明白
Re: 闲得无聊...研究脚本自修改
发表于 : 2013-09-03 22:27
由 millenniumdark
同沒看明白。
以前我倒試過自修改,配置選項直接寫在腳本裏,然後提供命令行參數通過修改自身文件的方式來修改配置。
Re: 闲得无聊...研究脚本自修改
发表于 : 2013-09-08 15:21
由 needle
sed都不能运行~
即使修改成可以运行,
读取文件,经过Sed修改后 重定向 到原文件,会出问题的!
Re: 闲得无聊...研究脚本自修改
发表于 : 2013-09-08 17:49
由 ceclinux
没执行的是报错了吧,>只redirect标准流的
Re: 闲得无聊...研究脚本自修改
发表于 : 2013-09-08 22:35
由 millenniumdark
needle 写了:
读取文件,经过Sed修改后 重定向 到原文件,会出问题的!
Re: 闲得无聊...研究脚本自修改
发表于 : 2013-09-09 12:05
由 YeLee
重定向不可预测的数据,不是都要异步写入的么?

Re: 闲得无聊...研究脚本自修改
发表于 : 2013-09-10 22:57
由 needle
我去~,我以为你要把三个点重定向一个文件~,我说 sed -i ... a.sh怎么会运行不了呢
不想是省略号啊~
是这样的:
cat一行,传进管道,此时,(cat的)输入流(读取文件的流)并没有关闭,
经sed修改后,
重定向到源文件(重定向会打开一个输出流写入原文件)
输入流跟输出流同时操作同一个文件,会出现竞争,结果是 导致文件内容最终清空!
也就是楼上讲的:
重定向不可预测的数据,不是都要异步写入的么?
要修改可以这样(如果非要写成一行的话):
代码: 全选
content=$(cat a.sh) && echo "$content" | sed ... >a.sh
另外:
有些命令会有一个输出选项,如sort有-o,iconv有-o就是为了解决重定向到原文件的问题。
再另外:
经sed的-i的修改后的文件已经不是原来的文件了,验证的话,你可以查看修改前后 文件的inode,已经改变了!
还有vim等编辑器的保存也是会改变文件的inode的哦!
这也就解释了,为什么,运行中的tomcat,删除catalina.out后再建catalina.out或修改了catalina.out后就没有日志了,而一定要重启tomcat。
因为运行中的tomcat保存的是catalina.out的旧inode。
且只有重定向会保持文件的原始性~,因为它不读取,只输出!
这是我以前对bash的研究。
