shell 历史命令相关记录
2016-07-07 17:25
246 查看
shell 历史命令使用上有很多技巧,除了经常经常使用的
!: 是对历史命令参数的直接引用 。
再来看一个长点的。
shell> tar zxvf httpd-2.0.59.tar.bz2
这显然是一个错误的输入,大家都知道bz2是使用bzip解压缩的,对应的tar参数,应当是使用”jxvf”. 那我们可以立即这样修正它:
shell> tar jxvf !:2
“!:2”会获得上面tar命令的第2个参数,作为当前的输入. 获取的历史输入,并不只是可以单独使用,也可以作为命令的一部分象这样:
执行完上面的获取,命令被替换成了tar jxvf httpd-2.0.59.tar.bz2 -C /usr/tmo
那就会按照-C指定的路径把包解压缩到/usr/tmo中.
命令执行后的结果:
tar: /usr/tmo: Cannot chdir: No such file or directory
tar: Error is not recoverable: exiting now
sorry,我一不小心又敲错了.我本来是想解压缩到/usr/tmp中的这时候另一个更有趣的命令派上用场了,
“^”号(替换)
这会把上一个命令行里的mo替换成mp
神奇吧,你的指法再快,只是在浪费时间,我轻敲6个字符,就搞定了上面的错误.
!是bash和cshell默认的历史替换符号
!! 重复最后一个命令
!:s/xy/yx 这个命令会把最后一个命令里的xy替换成yx
比如etho xy !:s/xy:/yx
!so 重复最近以so开始的命令
!?fn? 重复最近喊有fn的命令,在某个参数中或某个命令的名称中都可以使用
!32 执行号码为32的命令
!! & 会在最后一个命令的末尾加上& (可以加上任意内容)
!:0 挑选出命令的名称,而不是整行
!:3 第3个参数
!:2-4 第2到4个参数
!:-3 从第0个到第三个参数
!^ 第一个参数
!$ 最后一个参数
!* 第一个到最后一个参数
!:2* 第2个到最后一个
!:2- 从第2个开始,但不要结尾参数
!?fn?% 给出第一个包含 fn的次(sort fn1 fn2 fn3 … =>echo !?fn?% =>echo fn1)
还有一个会用到,
这个命令可将最后一条命令显示出来并更改历史记录,可以这样更有用
更cool的,请参
man 3 history
和其他的一些man page
命令行编程 shell是直接支持命令行编程的. 比如:
sh > /usr/local/src
sh > ls *z
ZendOptimizer-3.0.0-linux-glibc21-i386.tar.gz mod_fastcgi-2.4.2.tar.gz
dia-0.94.tar.gz mod_fcgid.1.10.tar.gz
gd-2.0.33.tar.gz mysql-4.0.27.tar.gz
jpegsrc.v6b.tar.gz mysql-standard-4.0.26-pc-linux-gnu-i686-glibc23.tar.gz
lighttpd-1.4.11.tar.gz
开工了,我要把这些东西装起来,解压缩吧,好多呀,要敲n个命令.
别急,这不会花费你几秒钟的时间;
眼晕了吧,不一会所有的包都解压缩了。
fc -l history !!
shell> ls /bin/sh shell> file !:$
!: 是对历史命令参数的直接引用 。
再来看一个长点的。
shell> tar zxvf httpd-2.0.59.tar.bz2
这显然是一个错误的输入,大家都知道bz2是使用bzip解压缩的,对应的tar参数,应当是使用”jxvf”. 那我们可以立即这样修正它:
shell> tar jxvf !:2
“!:2”会获得上面tar命令的第2个参数,作为当前的输入. 获取的历史输入,并不只是可以单独使用,也可以作为命令的一部分象这样:
shell> tar zxvf httpd-2.0.59.tar.bz2 shell> tar jxvf !:2 -C /usr/tmo
执行完上面的获取,命令被替换成了tar jxvf httpd-2.0.59.tar.bz2 -C /usr/tmo
那就会按照-C指定的路径把包解压缩到/usr/tmo中.
命令执行后的结果:
tar: /usr/tmo: Cannot chdir: No such file or directory
tar: Error is not recoverable: exiting now
sorry,我一不小心又敲错了.我本来是想解压缩到/usr/tmp中的这时候另一个更有趣的命令派上用场了,
“^”号(替换)
shell> ^mo^mp
这会把上一个命令行里的mo替换成mp
神奇吧,你的指法再快,只是在浪费时间,我轻敲6个字符,就搞定了上面的错误.
!是bash和cshell默认的历史替换符号
!! 重复最后一个命令
!:s/xy/yx 这个命令会把最后一个命令里的xy替换成yx
比如etho xy !:s/xy:/yx
!so 重复最近以so开始的命令
!?fn? 重复最近喊有fn的命令,在某个参数中或某个命令的名称中都可以使用
!32 执行号码为32的命令
!! & 会在最后一个命令的末尾加上& (可以加上任意内容)
!:0 挑选出命令的名称,而不是整行
!:3 第3个参数
!:2-4 第2到4个参数
!:-3 从第0个到第三个参数
!^ 第一个参数
!$ 最后一个参数
!* 第一个到最后一个参数
!:2* 第2个到最后一个
!:2- 从第2个开始,但不要结尾参数
!?fn?% 给出第一个包含 fn的次(sort fn1 fn2 fn3 … =>echo !?fn?% =>echo fn1)
还有一个会用到,
$ !!:p
这个命令可将最后一条命令显示出来并更改历史记录,可以这样更有用
$ !788:p显示第788条记录,并写到最近历史命令中去。
更cool的,请参
man 3 history
和其他的一些man page
命令行编程 shell是直接支持命令行编程的. 比如:
sh > /usr/local/src
sh > ls *z
ZendOptimizer-3.0.0-linux-glibc21-i386.tar.gz mod_fastcgi-2.4.2.tar.gz
dia-0.94.tar.gz mod_fcgid.1.10.tar.gz
gd-2.0.33.tar.gz mysql-4.0.27.tar.gz
jpegsrc.v6b.tar.gz mysql-standard-4.0.26-pc-linux-gnu-i686-glibc23.tar.gz
lighttpd-1.4.11.tar.gz
开工了,我要把这些东西装起来,解压缩吧,好多呀,要敲n个命令.
别急,这不会花费你几秒钟的时间;
sh > for i in `ls *z` sh > do sh > tar zxvf $i sh > done
眼晕了吧,不一会所有的包都解压缩了。
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天