対話型シェルにコピペしやすいインタフェースの例

🔗 zenn の記事

1 行目に、入力開始のマーカーを入力します。2 行目に、出力開始のマーカーを入力します。 これらは、マーカー以外の役割では行頭に出現しない文字列を選ぶ必要があります。 通常のケースにおいては、1 行目は % (% 記号とスペース)、2 行目は空行でよいでしょう。 3 行目以降に入出力内容を書きます。マーカーのについての補足はページ下部にあります。

をクリックすると、その行のコマンドがコピーされます。 をクリックすると、一括でコピーされます。特に の部分をクリックすると、コマンドのみが一括でコピーされます。 コピー内容は下のクリップボードにも表示されます。

echo 123 123 echo % %

マーカーについて補足

複数行に渡る場合は、毎回マーカーを書き直す必要はありません。 入力に行継続がない場合は、出力マーカーは空文字列でよいです。

% 

% echo foo; echo bar
foo
bar

入力が複数行に渡る場合は、出力マーカーを空文字列以外にする必要があります。

%> 
%< 
%> echo foo; \
echo 'bar
baz'
%< foo
bar
baz
%> cat <<EOS
qux
EOS
%< qux

出力マーカーが入力マーカーの prefix になっている場合は、入力マーカーが優先されます。 特に、入力マーカーを空文字列にすれば、各行に を書かなくて済みます。 出力内容は書かずに、入力をコピーしやすくするときに便利です。




echo foo
echo bar

出力に で始まる行がある場合は、入力マーカーを %% %   にするとよいでしょう。

%%

%% echo '% '
% 

マーカーの指定が冗長だという話について

それはそうっぽい。ただ、コーナーケースが無限にありそうで自前で構文解析とかはしたくない。  のときは指定なしで書ける(必要なときは別途指定)とかにするのが楽そう。

とはいえ、出力がどこで終わりなのかは構文解析ではどうしようもない。

% yes % echo test$'\n'test | head -$((RANDOM % 10 * 2))
% echo test
test
% echo test
test
% echo test
test
% echo test
test
% echo test
test
のような例があったとき、どれが入力で出力なのかは判定しようがない。こんなのは隅をつつくような例だけど、原理的には同じ。