![名前にスペースがあり、パスに二重引用符が含まれているfindコマンドの結果にアクセスしてbashでemacsを起動するにはどうすればよいですか? [コピー]](https://linux33.com/image/225411/%E5%90%8D%E5%89%8D%E3%81%AB%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E3%81%82%E3%82%8A%E3%80%81%E3%83%91%E3%82%B9%E3%81%AB%E4%BA%8C%E9%87%8D%E5%BC%95%E7%94%A8%E7%AC%A6%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8Bfind%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E7%B5%90%E6%9E%9C%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%97%E3%81%A6bash%E3%81%A7emacs%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
私は脱出の挑戦に直面しました:
プロセス:
ステップ1 - ファイル検索:Bashではfindコマンドが呼び出されます。
Findコマンドの出力は、次のパスを持つ単一のファイルです。
./vacation/the united states/"best times of our lives"/persona notes.org
メモ:
• パス内
"
フレーズを囲むために二重引用符が2回表示されます。best times of our lives
ほとんどのサブディレクトリには1つ以上の空白文字が含まれています。
•ファイル名内
- さらに、1つ以上の空白文字が表示されます。
ステップ2 - そのfindコマンドの結果を参照して見つけた1つのファイルにアクセスしてbashでEmacsを起動します。
トリッキーな道だけを通過すればこうなります。
$ emacs -nw './vacation/the united states/"best times of our lives"/persona notes.org'
emacsはbashで始まり、画面の表示はbashの内容から問題のファイルの内容を含むEmacsバッファに切り替わります。
最後の質問は:最初に述べた find コマンドの出力を bash の emacs コマンドに提供することで、これを正確にどのように達成できますか?
一般的に言えば、代替方法が使用されます。
$ emacs -nw $(find ./vacation/ -mmin -700 -type f -iname *.org)
しかし、文字通りの代替は
./vacation/the united states/"best times of our lives"/persona notes.org
結果ライン
$ emacs -nw ./vacation/the united states/"best times of our lives"/persona notes.org
空白文字と二重引用符はエスケープする必要があります。
しかし、どのように?
•$ emacs -nw '$(find ./vacation/ -mmin -700 -type f -iname *.org)'
- 動作しません:Emacsはbashで起動しますが、
-mmin -700 -type f -iname *.org)
「これらのファイルが存在しないためバッファが空です」というバッファを設定します。
•一重引用符を二重引用符に置き換えても機能しません。
$ emacs -nw "$(find ./vacation/ -mmin -700 -type f -iname *.org)"
- 試してみてください…働く混乱しています!それは動作します
- まあ、それを知っていますか?これが私がハッキングをやめて他のアプローチをとった理由です。問題を尋ね、解決策を提案するために説明します。
- したがって、これらすべてを特に特定の問題とその解決策の提示として、そして一般的にあなたの前に置かれた問題を解決する方法についてのインスピレーションとして考えてください。一歩後退して追求する別の方法を試してください。他人のアドバイス、他人への問題の説明、自分に質問する、最初にやらなかったことをすることは非常に役に立つ可能性があり、現在の制限を克服する方法です。
- 「適切な-execオプションを使用して、そのfind呼び出しの拡張子で見つかったファイルを開くとどうなりますか?」とアドバイスできます。これにより、プロセスはemacs呼び出しではなく検索呼び出しになります。 Emacsへのアクセスはさらに悪化します。たとえば、以前に一時停止した現在のemacsセッションを再開するために設定したエイリアスは、タスクリストに検索ジョブ(emacsジョブを含む)のみが含まれていますが、エイリアスは別のemacsジョブに依存するため機能しません。
答え1
使用find
とxargs
:
find ... -print0 | \
xargs -0 --no-run-if-empty -n 1 \
emacs -nw
(server-start)
これをEmacs起動ファイルに追加すると、~/.emacs
別のウィンドウで一度起動してemacs
から、それを使用してはるかにemacsclient
少ないオーバーヘッドで必要なファイルを開くことができます。
読むman find xargs emacsclient emacs
。