私のユースケースは次のとおりです。コマンドラインユーティリティは、melt
コマンドライン拡張子を含むファイル名を受け取って開くことができます。.melt
たとえば、次は正しいtest_p.melt
ファイルです。
colour:blue
out=24
colour:red
out=48
...開いてプレイしてくださいmelt test_p.melt
。
今問題は、.melt
ファイルがコメントをサポートしていないことです。コメントをサポートしたいと思います(aを含む行を含む未確認の引数を含むすべての行に対してエラーが発生します#
)。以下はコメント付きtest_c.melt
ファイルです。
# master comment here
colour:blue # this is blue!
out=24
colour:red
out=48
直接開くと、次のようにmelt
なります。
$ melt test_c.melt
Failed to load "# master comment here"
...
...そしてブルースクリーンは表示されません。
だから私は思った。いいね、コメントできます。それでも、Bashプロセス置換を使用してファイルをフィルタリングしてアプリケーションsed
に提供します。melt
まず、以下を使ってテストしてみてくださいcat
。
$ cat <(sed 's/#.*$//' test_c.melt)
colour:blue
out=24
colour:red
out=48
…よさそうですね。しかし、、以下を使用しようとすると、melt
私の戦略が取れます。
$ melt <(sed 's/#.*$//' test_c.melt)
Failed to load "/dev/fd/62"
Failed to load "/dev/fd/62"
デフォルトでは、Melt はプロセス交換用に提供された Bash パイプのファイル名を取得します。しかし、残念ながらそれがmelt
ファイルargv[i]
の場合は、.melt
ファイル名の拡張子を確認する必要があります。プロセスが失敗します。
だから私の質問は:この場合、プロセス置換をどのように使用できますか?それでは、パイプのファイル名に特定の拡張子がありますか.melt
?デフォルトでは、代替結果として/dev/fd/62.melt
渡されると思われるパイプファイル名が必要です。
注:もちろん、いつでもこれを行うことができます。
sed 's/#.*$//' test_c.melt > test_c_temp.melt
melt test_c_temp.melt
...しかし、まずここに2つのコマンドがあります。一方、1行のパイプが必要な場合は、後で一時ファイルを削除するのが気に入らない別の問題が発生します。
Bashプロセスの交換または標準のLinuxツールを介してこれを達成できますか?
ベストアンサー1
melt
1つの可能性は、ファイルの変更されたコピーを表示するファイルシステムを指すことです。ヒューズこれはファイルシステムドライバを構築する一般的な方法であり、一般的なプログラムとして実装されており、権限は必要ありません。持つ多くのFUSEファイルシステムそして、そのうちの1つがあなたを助ける良い機会があります。アイデアは、.melt
ファイルを読み取るときに「実際の」ファイルを読み取るが、コメントはフィルタリングされるマウントポイントを提供することです。
スクリプトファイルシステム有望に見えます(しかし一度も使ったことがありません)。次のように動作する必要があります。
mkdir ~/uncommented-melt
scriptfs -p "$HOME/bin/uncomment-melt;&*.melt" ~/work ~/uncommented-melt
ファイルを含む~/work
ツリーのルートはどこにありますか?.melt
~/bin/uncomment-melt
#!/bin/sh
sed 's/#.*$//' "$1"
その後、コメントを含むファイルがある場合は~/work/test_c.melt
実行できますmelt ~/uncommented-melt/test_c.melt
。
便利なその他のFUSEファイルシステム: