Shell-将文件内容保存到变量,然后输出变量
首先,正如你所注意到的,我对壳牌非常不在行:) 现在,我有以下任务:脚本获得两个参数(fileName,N)。如果文件中的行数大于N,那么我需要剪切最后N行,然后用它覆盖文件的内容 我想把文件的内容保存到一个变量中,然后把它放到文件中。但是由于某种原因,它不起作用 我在将最后N行保存到变量时遇到问题 我就是这样尝试的:Shell-将文件内容保存到变量,然后输出变量,shell,variables,Shell,Variables,首先,正如你所注意到的,我对壳牌非常不在行:) 现在,我有以下任务:脚本获得两个参数(fileName,N)。如果文件中的行数大于N,那么我需要剪切最后N行,然后用它覆盖文件的内容 我想把文件的内容保存到一个变量中,然后把它放到文件中。但是由于某种原因,它不起作用 我在将最后N行保存到变量时遇到问题 我就是这样尝试的: lastNLines=`tail -$2 $1` cat $lastNLines > $1 参数cat是文件名,而不是内容 相反,您可以使用临时文件,如下所示: tail
lastNLines=`tail -$2 $1`
cat $lastNLines > $1
参数
cat
是文件名,而不是内容
相反,您可以使用临时文件,如下所示:
tail -$2 $1 > $1._tmp
mv $1._tmp $1
要将内容保存到变量,可以执行问题中已包含的操作,或者:
lastNLines=`cat $1`
(当然,在执行
mv
命令之后)您的最后一行
不是文件名cat
接受文件名。您也无法打开输入文件进行写入,因为shell会在tail
到达输入文件之前将其截断,这就是您需要使用临时文件的原因
但是,如果您坚持不使用临时文件,这里有一个不可移植的解决方案:
tail -n$2 $1 | sponge $1
你可能需要为海绵安装
moreutils
也许我误解了,但是tail-n inFile>outFile
不够好吗?@pfnuesel问题是OP想要覆盖他正在读取的同一个文件。tail-n inFile>outFile&mv outFile inFile
@pfnuesel从外观上看,他正试图写入他正在读取的同一个文件。当您在>$1中结束某个内容时,Bash将打开它进行写入,从而在执行tail
之前清空文件。换句话说,tail
只会找到一个空文件。我仍然不明白为什么我的建议不起作用。好吧,那么把文件的内容保存到变量中怎么样。