¿Cómo canalizo la salida del dmenu a un comando?

¿Cómo canalizo la salida del dmenu a un comando?

Estoy experimentando con dmenu y encontré un problema.

Quiero crear un menú .bash_history de comandos anteriores, seleccionar uno y luego ejecutarlo en mi terminal. Esto es lo que tengo hasta ahora.

cat ~/.bash_history | dmenu -l 20

Cuando esto se ejecute desde la terminal, se repetirá mi elección. Cuando ejecuto esto desde un script, genera todo mi historial de bash.

La salida de la línea de comando

La salida del guión

Respuesta1

El siguiente script parece abrir dmenu y devolver la selección a stdout en bash.

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

Me trajeron aquí como una de las principales búsquedas de Google para el encabezado de la pregunta: "¿Cómo canalizo la salida del menú d a un comando?". Estaba buscando un script simple para ejecutar selecciones desde dmenu en el shell bash. Lo siguiente parece funcionar en bash:

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

También hay un script de propósito general mucho más complejo para hacer esto disponible en suckless.org aquí: https://tools.suckless.org/dmenu/scripts/dmenu_run_with_command_history/

Respuesta2

Después de buscar un poco en Google, encontré una solución similar a la respuesta de Mike, pero un poco más simple. Podrías usar $() para lograr tu tarea.

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

Básicamente, esto le permite obtener el resultado de dmenu y ejecutarlo como el siguiente comando.

información relacionada