我试图创建一个名为sv的shell脚本,该脚本将作为文件的前置,但我使用的解决方案似乎只适用于一次使用,并且删除了临时文件。有没有办法可以制作一个可以反复使用的shell脚本?
以下是问题: "假设我们希望在登录UNIX系统时保留所有日期的列表。通过添加以下内容可以很容易地做到这一点 .login文件: 日期>> logdates 不幸的是,最新的日期是在文件日志结束时。我想要它在前面;也就是说,该文件应包含从最新到最早的登录日期。编写一个C shell脚本sv,将按如下方式使用: 日期| sv logdates (这样,脚本非常通用,当我想在文件的前面添加内容时,我可以将它用于其他情况。)"
这是我提出的脚本:
"#!/bin/sh
cat - logdates /tmp/out && mv /tmp/out logdates"
这将工作一次,当我再次尝试时系统告诉我/ tmp / out不存在。
有人有任何建议吗?
谢谢!
答案 0 :(得分:2)
#!/bin/sh
cat - "$1" | sponge "$1"
答案 1 :(得分:1)
只需使用tac(反向cat)以反向输出文件
#!/bin/sh
tac logdates > /tmp/out && mv /tmp/out logdates
答案 2 :(得分:1)
您的shell脚本sv
可能包含以下内容,其中newline
是您从|
读取的数据,而$1
是传递给sv
的文件名:
#!/bin/sh
read newline
(echo "$newline"; cat $1) > tmp; mv tmp $1
然后你可以使用它:
$ date > logdates
$ date >> logdates
$ cat logdates
Tue Mar 11 22:14:34 CDT 2014
Tue Mar 11 22:14:37 CDT 2014
$ date | ./sv logdates
$ cat logdates
Tue Mar 11 22:14:50 CDT 2014
Tue Mar 11 22:14:34 CDT 2014
Tue Mar 11 22:14:37 CDT 2014
这仅适用于单行附加,因为read
由换行符(/ n)终止。