dmenu の出力をコマンドにパイプするにはどうすればよいですか?

dmenu の出力をコマンドにパイプするにはどうすればよいですか?

dmenu を試しているのですが、問題が発生しました。

以前のコマンドの .bash_history メニューを作成し、そのうちの 1 つを選択して、ターミナルで実行できるようにしたいと思います。これまでのところ、次のようになっています。

cat ~/.bash_history | dmenu -l 20

これをターミナルから実行すると、選択内容がエコー表示されます。これをスクリプトから実行すると、bash の履歴全体が出力されます。

コマンドライン出力

スクリプトの出力

答え1

以下のスクリプトは、dmenu を起動し、選択内容を bash の stdout に返すようです。

#!/bin/bash
cat ~/.bash_history | dmenu -l 20
exit

質問の見出し「dmenu の出力をコマンドにパイプするにはどうしたらいいですか?」で Google 検索のトップに表示されたので、ここにたどり着きました。bash シェルで dmenu からの選択を実行する簡単なスクリプトを探していました。次のスクリプトは bash で動作するようです:

#!/bin/bash 
read thing2execute <<< $(cat ~/.bash_history | dmenu -l 20)
$thing2execute
exit

これを行うための、より複雑な汎用スクリプトも suckless.org の次のサイトで入手できます。 https://tools.suckless.org/dmenu/scripts/dmenu_run_with_command_history/

答え2

グーグルで少し検索したところ、マイクの回答に似た、しかしもう少し簡単な解決策を見つけました。$()を使用してタスクを達成できます。

 $(cat ~/.bash_history | dmenu -l 20)

これにより、基本的にdmenuからの出力を取得し、次のコマンドとして実行できるようになります。

関連情報