
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.
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.