linux - linux中通过变量将输出重定向到文件

标签 linux shell command-line output-redirect

我有一个由用户定义的环境变量 $file 指向的文件,定义为:

file='filename.groovy'

当我这样做时:

回显$文件

它可以正确打印,没有任何问题:

文件名.groovy

当我这样做时:

cat $file

它成功打印了文件“filename.groovy”的内容

到这里一切都很完美

但是,问题是:

当我尝试将 sed 命令的输出重定向为:

sed 's/def version = ".*"/def version = "'$version'"/' $file > $file

然后

cat $file

它没有打印任何内容,即我的原始文件被截断

为什么会这样?

请提出使用变量$file将sed命令的输出重定向到文件“filename.groovy”的原因和解决方案

提前致谢。 。 。

最佳答案

您无法在读取文件的同时将输出重定向到该文件。

您可以做的是在 sed 中使用 -i 参数来更新文件:

sed -i 's/def version = ".*"/def version = "'$version'"/' $file

您可以在 https://stackoverflow.com/a/16901328/1983854 中查看示例我昨天发帖了。

关于linux - linux中通过变量将输出重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16916726/

相关文章:

linux - 如何在.sh文件中编写ssh连接代码以连接到远程计算机

php - 如何在 PHP 中执行 linux 命令并以原始格式回显输出?

linux - Bash 符号链接(symbolic link)到工作目录而不是指定目录

bash - 处理变量和新行,并在 bash 脚本中引用

perl - 如何获取整个命令行字符串?

linux - 用带有一些新行的 var 替换文本

c++ - Linux编译代码失败,Windows编译成功 : Cause/Fix?

linux - 如何将文件从 windows 复制到 linux(跨平台)?

c++ - 在 Visual Studio 中使用命令行参数进行调试

linux - 打印出带有特殊字符的文件行 - Linux