我有一个网站,我正在.scss使用该sass-convert命令格式化 sass ( ) 文件。它的语法是这样的:
$> sass-convert original.scss formatted.scss
Run Code Online (Sandbox Code Playgroud)
由于我在 git repo 中,因此拥有单独的输出文件是完全多余的。我的下一步是mv formatted.scss original.scss。我想做点什么来避免第二步。就像是
$> sass-convert original.scss %^&
Run Code Online (Sandbox Code Playgroud)
哪里%^&有一些神奇的 shell/bash 语法可以做我想要的。
有没有办法使用bash(或其他shell)语法在一行中用输入文件自动替换输出文件?
我的问题与此问题不同,因为iconv将首先创建输出文件,这将使输入文件为空,因此下面列出的任何解决方案都不起作用。如果你看这两个问题的答案,你会发现它们是不同的。此问题的答案适用于任何不会立即创建输出文件的命令。
Unix 程序可能有一个-i inplace开关(例如旧版本的seddo not,但现在大多数都从 中窃取了该标志perl),请查看man页面以获取详细信息。这通常会导致程序将输出写入临时文件,然后执行rename(2)调用以将新输出写入原始名称(此重命名可能还会破坏进程中的 selinux 上下文或其他花哨的 ACL,这可能是一个问题如果你使用那些东西)。
write-to-tmp-file-and-rename(2)模式的另一个解决方案sponge来自moreutils:
$ echo hi > file
$ tr h b < file | sponge file
$ cat file
bi
$
Run Code Online (Sandbox Code Playgroud)