乐趣区

关于java:Shell-命令奇淫技巧就是有点短

1、在任意目录之间疾速挪动

你发现自己要在两个或更多目录之间频繁挪动,一会切换到这里,一会切换到那里,来回跳转。这些目录之间隔得还挺远,重复输出简短的门路让人疲惫不堪。

应用内建命令 pushd 和 popd 来治理目录栈,轻松地在目录之间切换。上面是一个简略的示例:

$ cd /tmp/tank
$ pwd
/tmp/tank

$ pushd /var/log/cups
/var/log/cups /tmp/tank

$ pwd
/var/log/cups

$ ls
access_log error_log page_log

$ popd
/tmp/tank

$ ls
empty full

$ pushd /var/log/cups
/var/log/cups /tmp/tank

$ pushd
/tmp/tank /var/log/cups

$ pushd
/var/log/cups /tmp/tank

$ pushd
/tmp/tank /var/log/cups

$ dirs
/tmp/tank /var/log/cups

栈是一种后进先出的构造,这两个命令也正是这么做的。如果对一个新目录应用 pushd,那么它会将前一个目录压入栈中。当应用 popd 时,它会弹出栈顶保留的以后地位,切换到新的栈顶目录。应用这些命令更改地位时,会从左到右输入目录栈中的值,对应于栈中自顶向下的程序。

如果应用 pushd 时没有指定目录,那么它会替换栈顶的两个目录的地位,这样就能够重复使用 pushd 命令来实现两者之间的切换。cd 命令也可能达到雷同成果。

如果不记得目录栈中都有哪些目录,能够应用内建命令 dirs 依照从左到右的程序显示。加上 -v 选项后,显示模式更形象。

$ dirs -v
 0  /opt/yongheng
 1  /opt/yongheng/Shell
$

数字可用来调整栈内目录的地位。pushd +1 会将编号为 1 的目录置为栈顶(并切换到该目录)并将其余目录下压。

$  pushd +1
/opt/yongheng/Shell /opt/yongheng

$  dirs -v 
0  /opt/yongheng/Shell
1  /opt/yongheng 

要想看到相似于栈的目录列表,但又不心愿呈现编号,能够应用 - p 选项。

# dirs -p                                                                                              /opt/yongheng/Shell                                                                                    /opt/yongheng     

2、反复上一个命令

你刚刚输出了一个又长又麻烦的命令,其中蕴含了简短的路径名和一堆简单的参数。当初须要从新执行该命令。难道还得再输出一次?

这个问题有两种解决办法。第一种办法只须要在提示符下输出两个惊叹号,而后 bash 就会显示并反复执行上一个命令。例如:

$  cd /opt/                                                                                            $ !!                                                                                                   cd /opt/  

另一种(更古代的)办法是应用箭头键。按上箭头键会回滚到执行过的上一个命令。如果找到了须要的命令,按下 Enter 键就能够(再次)执行该命令。

3、参数重用

重用上一个命令很简略,应用 !! 就行了,但你须要的未必总是整个命令。如何只重用最初一个参数呢?

用 !$ 指明上一个命令中的最初一个参数。!:1 示意第一个参数,!:2 示意第二个参数,以此类推。

多个命令应用雷同的文件名为参数是司空见惯的事件。最常见的场景之一就是程序员编辑源代码文件,而后编译、再编辑,再编译……有了 !$,事件就不便多了。如下:

$ vi /some/long/path/name/you/only/type/once
...
$ gcc !$
gcc /some/long/path/name/you/only/type/once
...
$ vi !$
vi /some/long/path/name/you/only/type/once
...
$ gcc !$
gcc /some/long/path/name/you/only/type/once
...
$

明确其中的意思了吗?这不仅省去了大量的键盘输入,还防止了谬误。如果编译时输错文件名,那编译的可就不是刚刚编辑好的源代码文件了。有了 !$,就能够始终失去刚刚用过的文件名。要是想重用的参数位于命令行外部,能够应用带编号的 !: 命令来获取。

4、平安第一,命令测试

一不小心就会输错字符。(不信你瞧!)即使是简略的 bash 命令,由此带来的结果也十分重大:你会挪动错或删错文件。如果再加上模式匹配,后果更让人心跳,因为模式中的输出谬误会导致背道而驰的后果。小心谨慎的用户会怎么做?

能够应用命令历史个性和键盘便捷形式来反复参数,毋庸从头输出,因而可能缩小输出谬误。如果要用到辣手的模式来匹配文件,先用 echo 测试一下模式是否失常匹配,而后再用 !$ 进行实际操作。例如:

$ ls
ab1.txt ac1.txt jb1.txt wc3.txt

$ echo *1.txt
ab1.txt ac1.txt jb1.txt

$ echo [aj]?1.txt
ab1.txt ac1.txt jb1.txt

$ echo ?b1.txt
ab1.txt jb1.txt

$ rm !$
rm ?b1.txt
$

echo 是查看模式匹配后果的一种办法。一旦确信后果合乎预期,就能够将模式用于理论命令。这里咱们要删除有特定名称的文件,没人违心在这种事上犯错。

如果本文对您有帮忙,欢送 关注 点赞`,您的反对是我保持创作的能源。

转载请注明出处!

退出移动版