どんなコマンドでも上書き更新OK シェルスクリプトでは通常、(追記ではなく)ファイルの中身を書き換えたいと思ったら一時ファイルに新しい中身を書き出してから、元のファイルに上書きしてやるしかない。 単独のsedコマンドやnkfコマンドで済む場合は、それらのコマンドが個別に対応している場合もあるが、そういうのは運がよい場合だけ。どんなコマンドでもできるようにはならないものか? →なります こたえ 更新のために通したいコマンドが、CMD1、さらにCMD2、……、であって、更新したいファイルパスが$fileの中に格納されていたとすると、次のコードを書けば実現できる。 ただし、使用上の注意があるから、最後まで読むこと! なぜこれでうまくいくのか? UNIXにおいて、rmコマンドなどによる削除(unlink)は、ファイルの実体を消すのではなくinodeと呼ばれる見出しを消すだけであることは御存知のとお
![一時ファイル無しで、ファイルを上書き更新するシェルスクリプト - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/8e1a4ad4c6168c3a463e2c47ccd2332f0f3cb992/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUU0JUI4JTgwJUU2JTk5JTgyJUUzJTgzJTk1JUUzJTgyJUExJUUzJTgyJUE0JUUzJTgzJUFCJUU3JTg0JUExJUUzJTgxJTk3JUUzJTgxJUE3JUUzJTgwJTgxJUUzJTgzJTk1JUUzJTgyJUExJUUzJTgyJUE0JUUzJTgzJUFCJUUzJTgyJTkyJUU0JUI4JThBJUU2JTlCJUI4JUUzJTgxJThEJUU2JTlCJUI0JUU2JTk2JUIwJUUzJTgxJTk5JUUzJTgyJThCJUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUUzJTgyJUI5JUUzJTgyJUFGJUUzJTgzJUFBJUUzJTgzJTk3JUUzJTgzJTg4JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz02N2M2NDljZWRhMTI0MTljOWQ1Y2NiMjg0YzUxYjhmOQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDByaWNobWlrYW4lNDBnaXRodWImdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPThiNmJlNDE4ZmUwNjAzZmE0MGVjMDc5MzdlMGU5Y2Mx%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3Dc0f59f431e73d24891511c12146d08c4)