linux - 无法将标准输出重定向到完整路径指定的文件

标签 linux bash sed io-redirection

CONFIG_FILE=${WWW_DIR}/${WORDPRESS_TEST_DIR}/wp-config.php

不起作用:

sed "${SED_ARG}" ${CONFIG_FILE} >| ${CONFIG_FILE}

(我得到的只是一个空文件)。当我用实际路径字符串替换变量时,或者用“转义路径时,它都不起作用。

确实有效:

sed "${SED_ARG}" ${CONFIG_FILE} >| wp-config.php
mv wp-config.php ${CONFIG_FILE}

所以我假设 sed通话效果很好。

奇怪的是,这确实也有效:

echo TEST >| ${CONFIG_FILE}

所以sed毕竟,部分可能是问题所在。我一无所知。有什么想法吗?

最佳答案

在执行 sed 命令之前,重定向会打开文件进行写入(而不是追加),这使其成为一个新的空文件。

您可以使用 sed 的 -i 标志来进行就地替换:

sed -I "${SED_ARG}" "${CONFIG_FILE}"

我还在 ${CONFIG_FILE} 周围加了引号,以避免在包含任何特殊字符时出现意外行为。

关于linux - 无法将标准输出重定向到完整路径指定的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31222345/

相关文章:

bash - 如何删除文件中除第一个匹配行之外的重复行

python - ssh 管道损坏时停止 python 程序

linux - 更改日期 shell 的格式

linux - 在bash中使用sed写入变量指定的行号

bash - 如何在 Bash 中反转条件

bash - 合并 CSV 文件 : Appending instead of merging

regex - 查找所有电话号码

python - 提高套接字传输速度

linux - Subversion with Apache 和权限问题

java - 用于在 Linux 上创建 Java 守护程序服务的工具