Perl replace从脚本生成空文件,而不是从bash生成

Bas*_*sen 2 linux bash perl replace

我此刻对此问题感到非常沮丧.我看不出我做错了什么.我有谷歌Chrome的这个问题,它给出了没有正确关闭的通知.我想摆脱这个.此外,我还有一些与全屏尺寸有关的旧版更换.在bash中,所有行都产生预期的结果; 但是,在脚本文件中,它会生成一个空的设置文件...

这些行在文件中:

cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"work_area_bottom.*/\"work_area_bottom\": $(xrandr | grep \* | cut -d' ' -f4 | cut -d'x' -f2),/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"bottom.*/\"bottom\": $(xrandr | grep \* | cut -d' ' -f4 | cut -d'x' -f2),/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"work_area_right.*/\"work_area_right\": $(xrandr | grep \* | cut -d' ' -f4 | cut -d'x' -f1),/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"right.*/\"right\": $(xrandr | grep \* | cut -d' ' -f4 | cut -d'x' -f1),/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"exit_type.*/\"exit_type\": \"Normal\",/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"exited_cleanly.*/\"exited_cleanly\": true,/" > ~/.config/google-chrome/Default/Preferences
Run Code Online (Sandbox Code Playgroud)

我一直在谷歌上搜索这个问题; 但是,我没有得到正确的搜索词来获得有用的结果.

通过使用如下perl -p -i -e选项解决问题:

perl -p -i -e "s/\"exit_type.*/\"exit_type\": \"Normal\",/" ~/.config/google_chrome/Default/Preferences
Run Code Online (Sandbox Code Playgroud)

以上行足以摆脱不正确关机的Google Chrome消息

Sob*_*que 6

你的问题几乎可以肯定:

 > ~/.config/google-chrome/Default/Preferences
Run Code Online (Sandbox Code Playgroud)

因为那>说'截断文件'.更糟糕的是-它这样做首先开始读它.因此,在读取文件之前截断文件,导致零长度文件进入零长度文件.

我建议你只想在perl中这样做,而不是在中途宿舍.perl支持-i"就地编辑"选项.

或者只是编写您的脚本perl以开始.(如果给出样本输入和输出,那么敲一个能做你想做的事的例子就会非常简单).

  • 非常感谢,快速回答!你救了我的一天.使用-in-line替换选项解决了这个问题,我会在可能的情况下更新问题! (2认同)