Linux中是否有任何程序可以通过curses(例如列表框)来表示(通过管道或类似的东西)此类命令的结果,例如ls,cat,grep,ps等?因此,通过这样的程序,我想从列表中选择(通过箭头键或 hjkl)某些特定项目而不是复制粘贴它?
我需要类似的东西dialog
。它允许使用自定义小部件创建自定义窗口,但我只需要所有这些小部件中的列表框,并且我希望能够自定义它。例如,我希望能够(在配置文件或参数内)在按 Enter 时更改其行为(例如,此类列表可能包含我可以通过按 Enter 播放的媒体文件列表)。另外,我希望能够更改此类列表框的外观,以便它可能包含不同的列,我也希望可搜索列表框和彩色。
答案1
dialog
我同意您可能需要从这里开始的评论。为了向您展示如何使用它,这里有一个示例脚本
#!/bin/bash
#make some temporary files
command_output=$(mktemp)
menu_config=$(mktemp)
menu_output=$(mktemp)
#make sure the temporary files are removed even in case of interruption
trap "rm $command_output;
rm $menu_output;
rm $menu_config;" SIGHUP SIGINT SIGTERM
#replace ls with what you want
ls >$command_output
#build a dialog configuration file
cat $command_output |
awk '{print NR " \"" $0 "\""}' |
tr "\n" " " >$menu_config
#launch the dialog, get the output in the menu_output file
dialog --no-cancel --title "Put you title here" \
--menu "Choose the correct entry" 0 0 0 \
--file $menu_config 2>$menu_output
#revcover the output value
menu_item=$(<$menu_output)
#recover the associated line in the output of the command
entry=$(cat $command_output | sed -n "${menu_item}p" $config_file)
#replace echo with whatever you want to process the chosen entry
echo $entry
#clean the temporary files
[ -f $command_output ] && rm $command_output
[ -f $menu_output ] && rm $menu_output
[ -f $menu_config ] && rm $menu_config
另外,从你的问题来看,你似乎也更喜欢控制台文件管理器。其中存在很多,例如护林员或者午夜指挥官。如果这些配置不足以满足您的需求,它们的源代码可能在您自己的工具设计中有用。