Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell-将文件内容保存到变量,然后输出变量_Shell_Variables - Fatal编程技术网

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

Shell-将文件内容保存到变量,然后输出变量,shell,variables,Shell,Variables,首先,正如你所注意到的,我对壳牌非常不在行:) 现在,我有以下任务:脚本获得两个参数(fileName,N)。如果文件中的行数大于N,那么我需要剪切最后N行,然后用它覆盖文件的内容 我想把文件的内容保存到一个变量中,然后把它放到文件中。但是由于某种原因,它不起作用 我在将最后N行保存到变量时遇到问题 我就是这样尝试的: lastNLines=`tail -$2 $1` cat $lastNLines > $1 参数cat是文件名,而不是内容 相反,您可以使用临时文件,如下所示: tail

首先,正如你所注意到的,我对壳牌非常不在行:)

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

我想把文件的内容保存到一个变量中,然后把它放到文件中。但是由于某种原因,它不起作用

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

我就是这样尝试的:

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
只会找到一个空文件。我仍然不明白为什么我的建议不起作用。好吧,那么把文件的内容保存到变量中怎么样。