Linux コマンド プロンプトから動作する次のコマンド ラインがあります。
vi /tmp/test.txt -s <( echo ":1 s/^\/\/ VERSION: .*$/\/\/VERSION: $(date)/g" )
vim
次のコマンドを含む一時ファイルを (プロセス置換を使用して) 作成します。
:1 s/^\/\/ VERSION: .*$/\/\/ VERSION: $(date)/g
/tmp/test.txt
編集用にファイルを開き、以前に作成した一時ファイルからコマンドを実行します。行 1 を見つけて、その行を現在のタイム スタンプに置き換えます。次のようになります。
// VERSION: Fri Apr 12 21:20:03 CEST 2013
...
...
次に、必要な編集を行い、ファイルを保存することにした場合にのみ、すべての変更がディスクにコミットされます。最初にディスク上のファイルを変更してからエディタを起動するというオプションはありません。コンテンツ自体は変更されていませんが、ファイルのタイムスタンプは異なるためです。
これまでのところ、設計/意図どおりに機能します。
今、私はこの vi コマンド ラインを make ファイルに移動しようとしていますが、そこで失敗します。構築を試みました$(shell .....)
が、make がエラーをスローしています。
edit:
$(shell vi $(src).cpp -s <( echo ":1 s/^\/\/ VERSION: .*$/\/\/VERSION: $(date)/g" )
Makefile の行が余分な引用符と括弧をいじる方法を理解しようとしていますが、まだ解決していません。
Ubuntu Linux 12.10 と GNU Make 3.81 を実行しています
vi project.cpp -s <( echo ":1 s/^\/\/ VERSION: .*$/\/\/VERSION: $(date)/g" )
Make は "Process Substitution" 構造を好まないようです<( command )
。余分な (実際の) ファイルを使用したくありません。
€ make edit
vi project.cpp -s <( echo ":1 s/^\/\/ VERSION: .*$/\/\/VERSION: $(date)/g" )
/bin/sh: 1: Syntax error: "(" unexpected
make: *** [edit] Error 2