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
闲得无聊...研究脚本自修改
-
- 帖子: 36
- 注册时间: 2008-06-02 15:51
- 枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
- 联系:
- millenniumdark
- 论坛版主
- 帖子: 4159
- 注册时间: 2005-07-02 14:41
- 系统: Ubuntu 14.04 (Kylin)
- 联系:
Re: 闲得无聊...研究脚本自修改
同沒看明白。
以前我倒試過自修改,配置選項直接寫在腳本裏,然後提供命令行參數通過修改自身文件的方式來修改配置。
以前我倒試過自修改,配置選項直接寫在腳本裏,然後提供命令行參數通過修改自身文件的方式來修改配置。
- needle
- 帖子: 78
- 注册时间: 2009-12-01 13:34
Re: 闲得无聊...研究脚本自修改
sed都不能运行~
即使修改成可以运行,
读取文件,经过Sed修改后 重定向 到原文件,会出问题的!
即使修改成可以运行,
读取文件,经过Sed修改后 重定向 到原文件,会出问题的!
- ceclinux
- 帖子: 308
- 注册时间: 2013-01-17 2:42
- 系统: Ubuntu 12.04LTS
Re: 闲得无聊...研究脚本自修改
没执行的是报错了吧,>只redirect标准流的
- millenniumdark
- 论坛版主
- 帖子: 4159
- 注册时间: 2005-07-02 14:41
- 系统: Ubuntu 14.04 (Kylin)
- 联系:
- YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
- 联系:
Re: 闲得无聊...研究脚本自修改
重定向不可预测的数据,不是都要异步写入的么? 

◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
- needle
- 帖子: 78
- 注册时间: 2009-12-01 13:34
Re: 闲得无聊...研究脚本自修改
我去~,我以为你要把三个点重定向一个文件~,我说 sed -i ... a.sh怎么会运行不了呢
不想是省略号啊~
是这样的:
cat一行,传进管道,此时,(cat的)输入流(读取文件的流)并没有关闭,
经sed修改后,重定向到源文件(重定向会打开一个输出流写入原文件)
输入流跟输出流同时操作同一个文件,会出现竞争,结果是 导致文件内容最终清空!
也就是楼上讲的:
另外:
有些命令会有一个输出选项,如sort有-o,iconv有-o就是为了解决重定向到原文件的问题。
再另外:
经sed的-i的修改后的文件已经不是原来的文件了,验证的话,你可以查看修改前后 文件的inode,已经改变了!
还有vim等编辑器的保存也是会改变文件的inode的哦!
这也就解释了,为什么,运行中的tomcat,删除catalina.out后再建catalina.out或修改了catalina.out后就没有日志了,而一定要重启tomcat。
因为运行中的tomcat保存的是catalina.out的旧inode。
且只有重定向会保持文件的原始性~,因为它不读取,只输出!
这是我以前对bash的研究。


不想是省略号啊~
是这样的:
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的研究。
