目的は、コピーして貼り付けることができる(たとえば、Webフォーラムに投稿する)bash一行コマンドを作成し、ファイルをパッチすることです。パッチファイルをコピーしてコマンドラインに貼り付けて展開する方法を考えてください。
ソースシステムでは:
- パッチファイルが入力として使用されます。
- 出力を生成するには、別のbashコマンドを使用する必要があります。
現在、これは次のように行われます。
$ oldifs=$IFS;printf '\n{ ';while IFS= read -r p;do printf 'echo %q; ' "$p";done < custom.patch;printf ' }\n\n';IFS=$oldifs
これにより、次のような出力が生成されます。
{
...
echo \ //=\ require\ xyz.js;
echo @@\ -81\,7\ +80\,6\ @@;
echo $' \t\t\tchild.currentlyBackingUp = $(\'.dashboard-currently-backing-up\', element).dashboardBackup({type: this.type});';
...
}
これは、ターゲットシステムで1行のパッチコマンドへの入力として使用できます。たとえば、次のようになります。
patch < { echo \ //=\ require\ xyz.js; echo @@\ -81\,7\ +80\,6\ @@; ... }
これまでは、ソースパッチファイルに前髪(!
)文字が含まれるまで大丈夫でした。次に、printf
次のようにエスケープされた出力を生成します。
echo $' \t\t\tif (!cp.user.isMyUserQueryLimited()) {';
echo $'-\t\t\t\tif (ui.tab.name === "map-tab" && !serverEnv.queryLimited) {';
echo $' \t\t\t\tif (!hosted) {';
このような行をbashコマンドラインに貼り付けると、次のような結果が得られます。
#-bash: !cp.user.isMyUserQueryLimited: event not found
プログラムでテキストストリームデータを生成する方法強く打つ履歴拡張が有効になっている(histexpand = on)他のbashコマンドプロンプトに貼り付けることができるコマンドを介してテキストデータストリームを出力するためにコピーして貼り付けることができるコマンドは何ですか?
答え1
あなたの質問の詳細のいくつかは少し混乱しています。特に、なぜechoステートメントを生成したいのかわかりません。だから私は誤解しているかもしれませんが、コピー&ペーストコマンドでパッチを適用する方法を探しているようです。その場合は、次の方法を使用してこれを実行できます。ここのドキュメント。
あなたの表記法を使用すると、次のように見えます。
patch <<HEREDOC
...
//= require xyz.js
@@ -81,7 +80,6 @@
child.currentlyBackingUp = $('.dashboard-currently-backing-up', element).dashboardBackup({type: this.type});
...
HEREDOC
以下は、技術を説明する簡単な例です。
まずファイルを作成します。
cat <<HEREDOC > file-v1.txt
this is the first line
HEREDOC
これで、ファイルの更新されたバージョンを作成します(行を追加するなど)。
cat <<HEREDOC > file-v2.txt
this is the first line
here is a second line
HEREDOC
次に、2つのファイルのパッチを計算します。
diff -u file-v1.txt file-v2.txt
出力は次のようになります。
--- file-v1.txt 2017-10-26 09:53:58.000000000 -0500
+++ file-v2.txt 2017-10-26 09:53:58.000000000 -0500
@@ -1 +1,2 @@
this is the first line
+here is a second line
これで、コマンドは次のようになります。
patch file-v1.txt <<HEREDOC
--- file-v1.txt 2017-10-26 09:53:58.000000000 -0500
+++ file-v2.txt 2017-10-26 09:53:58.000000000 -0500
@@ -1 +1,2 @@
this is the first line
+here is a second line
HEREDOC
このコマンドをコピーして端末に貼り付けて実行できる必要があります。正しいディレクトリにある場合は、埋め込みfile-v1.txt
テキストで更新されます。file-v2.txt
また、heredocは履歴拡張を行いません。以下を確認できます。
cat <<HEREDOC
!!
HEREDOC