最近有很多朋友看我的共享屏幕,他们非常惊讶,原来在shell中还可以这样做。
如果您多年来一直在日复一日地研究shell,您可能知道其中的一些技巧。但是很多普通用户只是偶尔使用shel
所以今天我们来分享一些小技巧,可以让你更愉快的操作shell。
进入刚创建的目录
mkdir /some/long/path/that/is/a/pain/to/type
cd $_
这比键入“cd /some/long/path..."要快。$_变量拾取上一个命令中的最后一项。
在线附近跳
control—A将光标跳转到行首
control-E会将光标跳到行尾
所以如果你开始打字...
kdir /some/long/path/that/is/a/pain/to/type
然后你突然发现忘记了“mkdir”中的“m”,你可以点击control-A,添加它,然后点击ENTER提交命令或control-E跳回到行尾并继续键入。如果你已经按下了ENTER键并得到了一个错误,那么向上箭头将移回历史记录中。
历史
history
将显示历史命令。假设它看起来像这样:
551 ssh user@server
552 vi /tmp/file
553 grep Prod /some/other/file
如果您想删除vi命令,可以输入
!552
也可以输入
!vi
小心最后一种形式!使用命令号重新运行始终会得到准确的命令,但类似
!r
将删除最后一个以r开头的命令。可能是“rm /some/file”。&可能是“rm -rf *"。
您输入control-R来搜索历史记录。
假如你输入了一个长命令但不想运行它时
所以你输入了这样的东西:
cp /some/long/path/to/files/*.csv /some/other/long/directory/that/is/a/pain/to/type
当你读到最后,你意识到你还没有创建/some/other/long/directory/that/is/a/pain/to/type,那么可以不用取消命令并创建目录并重新键入命令,可以这样做:
单击control-A,键入#以在行的开头插入注释字符,然后单击return。
这长长的命令已经记在你们的历史上了。可以创建目录,然后滚动回(向上箭头)到该命令,按control-A,删除#,然后按ENTER。
条件执行
您可以在一行中执行多个命令,方法是用分号分隔它们:
command1 ; command2
但是如果你不想让command2运行,除非command1成功,那该怎么办?例如:
mkdir /tmp/blah ; cd /tmp/blah ; cp /somewhere/*.csv .
如果mkdir和cd失败,则不希望cp运行。使用逻辑运算符“and”代替分号:
mkdir /tmp/blah && cd /tmp/blah && cp /somewhere/*.csv .
一旦任何命令失败,这将停止执行。
查看命令
假设你有一个很长的复制、rsync等过程。你想看看它是如何进行的。您需要每60秒运行一次du -sh(“磁盘使用情况、摘要、可读输出”)。在过去的岁月里,你会做这样的事情:
while [ 1 ] ; do echo ; date ; du -sh /dest/dir ; sleep 60; done
这同样有效并且更简单:
watch -n 60 /dest/dir
如果您多年来一直在日复一日地研究shell,您可能知道其中的一些技巧。但是很多普通用户只是偶尔使用shel
所以今天我们来分享一些小技巧,可以让你更愉快的操作shell。
进入刚创建的目录
mkdir /some/long/path/that/is/a/pain/to/type
cd $_
这比键入“cd /some/long/path..."要快。$_变量拾取上一个命令中的最后一项。
在线附近跳
control—A将光标跳转到行首
control-E会将光标跳到行尾
所以如果你开始打字...
kdir /some/long/path/that/is/a/pain/to/type
然后你突然发现忘记了“mkdir”中的“m”,你可以点击control-A,添加它,然后点击ENTER提交命令或control-E跳回到行尾并继续键入。如果你已经按下了ENTER键并得到了一个错误,那么向上箭头将移回历史记录中。
历史
history
将显示历史命令。假设它看起来像这样:
551 ssh user@server
552 vi /tmp/file
553 grep Prod /some/other/file
如果您想删除vi命令,可以输入
!552
也可以输入
!vi
小心最后一种形式!使用命令号重新运行始终会得到准确的命令,但类似
!r
将删除最后一个以r开头的命令。可能是“rm /some/file”。&可能是“rm -rf *"。
您输入control-R来搜索历史记录。
假如你输入了一个长命令但不想运行它时
所以你输入了这样的东西:
cp /some/long/path/to/files/*.csv /some/other/long/directory/that/is/a/pain/to/type
当你读到最后,你意识到你还没有创建/some/other/long/directory/that/is/a/pain/to/type,那么可以不用取消命令并创建目录并重新键入命令,可以这样做:
单击control-A,键入#以在行的开头插入注释字符,然后单击return。
这长长的命令已经记在你们的历史上了。可以创建目录,然后滚动回(向上箭头)到该命令,按control-A,删除#,然后按ENTER。
条件执行
您可以在一行中执行多个命令,方法是用分号分隔它们:
command1 ; command2
但是如果你不想让command2运行,除非command1成功,那该怎么办?例如:
mkdir /tmp/blah ; cd /tmp/blah ; cp /somewhere/*.csv .
如果mkdir和cd失败,则不希望cp运行。使用逻辑运算符“and”代替分号:
mkdir /tmp/blah && cd /tmp/blah && cp /somewhere/*.csv .
一旦任何命令失败,这将停止执行。
查看命令
假设你有一个很长的复制、rsync等过程。你想看看它是如何进行的。您需要每60秒运行一次du -sh(“磁盘使用情况、摘要、可读输出”)。在过去的岁月里,你会做这样的事情:
while [ 1 ] ; do echo ; date ; du -sh /dest/dir ; sleep 60; done
这同样有效并且更简单:
watch -n 60 /dest/dir