Shell - 将文件内容保存到变量然后输出变量

时间:2013-11-16 20:42:16

标签: shell variables

首先,我真的很擅长shell,你会注意到:)

现在,我有以下任务:脚本获取两个参数(fileName,N)。如果文件中的行数大于N,那么我需要剪切最后N行,然后用它覆盖文件的内容。

我想将文件的内容保存到变量中,然后将其保存到文件中。但由于某种原因,它无法正常工作。

我将最后N行保存到变量时遇到问题。

这就是我尝试这样做的方式:

lastNLines=`tail -$2 $1`
cat $lastNLines > $1

2 个答案:

答案 0 :(得分:2)

您的lastNLines不是文件名。 cat获取文件名。您也无法打开输入文件进行写入,因为shell会在tail到达之前截断它,这就是您需要使用临时文件的原因。

但是,如果你坚持不使用临时文件,这是一个不可移植的解决方案:

tail -n$2 $1 | sponge $1

您可能需要为moreutils安装sponge

答案 1 :(得分:1)

cat所采用的参数是文件名,而不是内容。

相反,您可以使用临时文件,如下所示:

tail -$2 $1 > $1._tmp
mv $1._tmp $1

要将内容保存到变量,您可以执行已包含在问题中的内容,或者:

lastNLines=`cat $1`

(当然是mv命令之后)