专门针对单列/多行结果处理的bash脚本

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

专门针对单列/多行结果处理的bash脚本

#1

帖子 eexpress » 2014-04-07 17:14

代码: 全选

▶ cat xsel-sento.bash 
#!/bin/bash

f=`xsel -o|tr '\n' ' '|sed 's/\ +/ /g'`
#参数中可使用+号替换xsel结果
echo "$*"|grep '\+'
if [ $? == 0 ]; then
	cmd=`echo $*|sed "s'\+'$f'"`
else
	cmd=$*" "$f
fi
echo $cmd
echo "-----------------------"
echo "确认执行,请按空格键/回车键。其他键取消。"
read -s -n 1 y
if [[ $y == '' ]]; then
	eval $cmd
fi
例子,很多时候会碰到单列的结果,比如find的结果,apt-get的多行包名提示,可以用鼠标选择,然后脚本发送到命令执行。
find只是一个例子,因为find可以-exec执行的。

代码: 全选

▶ find . -iname "s*.pl"
./old.script/song.pl
./old.script/sdcv.pl
./old.script/short.url.pl
./bot/sdcv0.pl
./bot/shorturl.pl
./slave-mode.pl
./signature-gpg.pl
./svg_export_overlays_to_pdf.pl
使用+号扩展

代码: 全选

▶ xsel-sento.bash cp + /media/eexp/32G/ 
cp + /media/eexp/32G/
cp ./old.script/song.pl ./old.script/sdcv.pl ./old.script/short.url.pl ./bot/sdcv0.pl ./bot/shorturl.pl ./slave-mode.pl ./signature-gpg.pl ./svg_export_overlays_to_pdf.pl /media/eexp/32G/
-----------------------
确认执行,请按空格键/回车键。其他键取消。
不使用+号

代码: 全选

▶ xsel-sento.bash rm
rm ./old.script/song.pl ./old.script/sdcv.pl ./old.script/short.url.pl ./bot/sdcv0.pl ./bot/shorturl.pl ./slave-mode.pl ./signature-gpg.pl ./svg_export_overlays_to_pdf.pl
-----------------------
确认执行,请按空格键/回车键。其他键取消。

代码: 全选

▶ sudo apt-get upgrade
[sudo] password for eexp: 
no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
正在对升级进行计算... 完成
下列软件包的版本将保持不变:
  linux-generic linux-headers-generic linux-image-generic linux-signed-generic
  linux-signed-image-generic python-ubuntu-sso-client ubuntu-sso-client
  unity-plugin-scopes unity-scope-click unity-scope-mediascanner2 unity-scope-scopes
强制安装包的时候

代码: 全选

▶ xsel-sento.bash sudo apt-get install
sudo apt-get install linux-generic linux-headers-generic linux-image-generic linux-signed-generic linux-signed-image-generic python-ubuntu-sso-client ubuntu-sso-client unity-plugin-scopes unity-scope-click unity-scope-mediascanner2 unity-scope-scopes
-----------------------
确认执行,请按空格键/回车键。其他键取消。
可以把xsel-sendto.bash改成xx。更容易输入。
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 专门针对单列/多行结果处理的bash脚本

#2

帖子 lilydjwg » 2014-04-07 21:27

[bash]sudo apt-get install $(xsel)[/bash]
按 Tab 可先展开看看,修改一下,再决定是否执行。另外可以 alias -g XS='$(xsel)'。
当然,我说的是 zsh。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 专门针对单列/多行结果处理的bash脚本

#3

帖子 eexpress » 2014-04-07 21:58

必须经过sed等的啊。
alias不兼容的,好吧。直接改xx足够。lol
● 鸣学
回复