在终端中,我可以输入Ctrl+R来搜索之前在 BASH 中输入的匹配命令。例如,如果我输入Ctrl+ Rthen grep,它会列出我的最后一个grep命令,我可以按回车键来使用它。不过,这只给出了一个建议。有什么办法可以循环浏览其他以前键入的匹配命令吗?
假设我的 中有以下简单示例history:
...
76 cd ~
77 ./generator.sh out.file
78 cp out.file ~/out/
79 ./out/cleaner.sh .
80 ls -alnh /out
...
Run Code Online (Sandbox Code Playgroud)
如果我想在一个命令中执行命令77、78和79,是否存在快捷方式?我试过!77 !78 !79,它只会将它们全部放在一行上执行。
我想构建一个简短的函数来执行以下操作。假设我将文件“file.tex”移动到我的文档目录:
mv file.tex ~/Documents
Run Code Online (Sandbox Code Playgroud)
然后,我cd想到那个目录:
cd ~/Documents
Run Code Online (Sandbox Code Playgroud)
我想将其推广到任何目录,以便我可以这样做:
mv file.tex ~/Documents
follow
Run Code Online (Sandbox Code Playgroud)
并让follow命令从上一个命令读取目标,然后相应地执行。对于一个简单的目录,这不会节省很多时间,但是在处理嵌套目录时,能够只使用
mv file.tex ~/Documents/folder1/subfolder1
follow
Run Code Online (Sandbox Code Playgroud)
我认为这会相对简单,我可以做这样的事情:
follow()
{
place=`history 2 | sed -n '1p;1q' | rev | cut -d ' ' -f1 | rev`
cd $place
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。如果我 echo $place,我确实得到了所需的字符串(我正在用 测试它~/Documents),但最后一个命令返回
No such file or directory
Run Code Online (Sandbox Code Playgroud)
该目录肯定存在。我不知所措。你能帮我吗?
如果我想搬到一个名为longfile来自/longpath/于/longpath/morepath/我可以这样做
mv (/longpath)/(longfile) $1/morepath/$2
Run Code Online (Sandbox Code Playgroud)
即我可以让 bash 知道它应该记住输入的特定部分,以便我以后可以在同一输入中重用它吗?(在上面的例子中,我使用了一个虚构的记忆命令,它通过用括号括起来和一个$插入组内容的虚构重用命令来工作)
在 Vim 中,您可以点击Shift-k并打开光标下字符串的手册。
是否也可以以这种方式配置 Bash(使用时set -o vi)?
例如:
# '|' represents the position of a cursor.
$ |
# Write a command.
$ grep things *|
# Hit 'esc' to enter normal mode.
# Hit '3b' to move to 'grep'.
$ |grep things *
# Now I would like to hit 'Shift-k' to open 'man grep'.
Run Code Online (Sandbox Code Playgroud)