在 Linux 中执行最后一个命令输出的快捷方式

在 Linux 中执行最后一个命令输出的快捷方式

是否有任何快捷方式可以执行上一个命令的输出,例如执行该locate命令找到的任何内容?

例如,如果我运行此locate命令并得到此输出...

root@kali:~/scripts# locate nasm_shell
/usr/share/metasploit-framework/tools/nasm_shell.rb

有没有办法nasm_shell.rb用快捷方式执行该命令?只是懒得复制和粘贴完整的命令路径。

答案1

$(locate nasm_shell)

或者

`locate nasm_shell`

您可以使用反引号``$()在子 shell 中执行命令,例如:

user@host$ which df
/bin/df
user@host$ `which df`
Filesystem          1K-blocks      Used Available Use% Mounted on
...
/dev/sda1              498532    199535    268738  43% /boot
/dev/mapper/vg-home 412718256 232104076 159626276  60% /home

如果输出不止一行,则需要使用grep或其他工具来选择正确的输出:

例如,以下内容包含我想要的输出,要查找mkdir

user@host$ locate mkdir
/bin/mkdir
/opt/project-neon5/include/KF5/KIOCore/kio/mkdirjob.h
/usr/lib/klibc/bin/mkdir
/usr/lib/mc/fish/mkdir
/usr/share/aclocal-1.14/mkdirp.m4
/usr/share/man/man1/gvfs-mkdir.1.gz
/usr/share/man/man1/mkdir.1.gz
/usr/share/man/man2/mkdir.2.gz
/usr/share/man/man2/mkdirat.2.gz
/usr/share/zsh/functions/Completion/Unix/_mkdir
/var/lib/gems/1.9.1/doc/bundler-1.3.5/ri/Bundler/mkdir_p-c.ri

我只希望mkdir它存在于 中/bin。使用 grep 选择正确的输出,然后向子 shell 的输出添加一个参数:

user@host$ $(locate mkdir | grep "^\/bin") test-directory && ls -ld test-directory
drwxrwxr-x 2 user user 4096 Nov 15 21:18 test-directory

注意使用替代语法$()

答案2

这应该可以使用evallocate$()像这样加上:

eval $(locate nasm_shell)

但使用这种方法的风险在于,假设您的nasm_shell系统上有多个同名文件。那么该命令将失败,因为它会尝试运行locate命令的完整输出。但如果您 100% 确定您要查找的内容位于一个文件/脚本中nasm_shell.rb,那么这种方法就没问题。

相关内容