首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash picking参数

bash picking参数
EN

Stack Overflow用户
提问于 2011-11-07 21:53:01
回答 2查看 252关注 0票数 0

当我有如下代码时,我想写一个函数

代码语言:javascript
复制
echo 1 2 3|pick

然后,Pick将获取参数,我将对它们做一些处理。

我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2011-11-07 22:31:52

你在找xargs吗?

票数 2
EN

Stack Overflow用户

发布于 2011-11-20 07:13:19

如果我没记错的话,OP的目的与我相同:您向它提供一个字符串,如果该字符串包含多个{word,line},它将显示一个菜单,您选择一个菜单,然后返回您在stdout上选择的菜单。

如果只有一项,它就会返回它。

这对于--使用我的特殊用例--日志文件查看器脚本很有用:您给它一个文件名的子字符串,它会遍历find /var/log -name \*$arg\* -print查看它能找到什么。如果它得到一个唯一的命中,它会把它交回给你的脚本,脚本对它运行的次数会更少。如果它有不止一次点击,它会显示一个菜单,让你选择一个。

ISTR说KSH有一个内置的,但我对它印象不深;我不记得bash有没有。

我在这里是因为在我自己写它之前,我正在寻找是否有人已经写了它。:-)

更新:不,我自己写的:

下面是一些示例代码:

/usr/local/bin/msg:

代码语言:javascript
复制
PATH=$PATH:/usr/local/bin

[ $UID = 0 ] || exec sudo su root -c "$0 $*"

FILE=/var/log/messages

[ $# -eq 1 ] &&
   FILE=`find /var/log/ -name \*$1\* -print |
   egrep -v '2011|.[0-9]$' |
   pick`

echo "$FILE"
less +F $FILE

由于我将名称转换为less +F,因此我希望grep出归档日志文件;这是为了交互式日志查看。

/usr/local/bin/pick:

代码语言:javascript
复制
# Present the user a bash Select menu, and let them pick
# Try to be smart about multi-line responses

# must take input on stdin if it might be multiline

# get multiline input from stdin
while read LINE </dev/stdin
do
        CHOICES+=( $LINE )
done

# add on anything specified as arguments
while [ $# -gt 0 ]
do
        CHOICES+=( $1 )
        shift
done


# if only one thing to pick, just pick it
if [ ${#CHOICES[*]} -eq 1 ]
then
        echo $CHOICES
        exit
fi


# eval set $CHOICES
select CHOSEN in ${CHOICES[@]}
do
        echo $CHOSEN
        exit
done </dev/tty
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8037374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档