不知道如何表达这个问题,但基本上,我经常发现自己运行一个命令,比如vagrant
启动虚拟机,然后 ssh 进入它,如下所示:
vagrant up && vagrant ssh
除了编写自己的函数或脚本之外,有没有办法“重用”vagrant
命令第二部分中的部分?
答案1
随着(t)csh
,bash
或zsh
历史扩展你可以写:
vagrant up && !#:0 ssh
但是,说真的,你不会
答案2
你可以这样做:
eval vagrant\ {'up &&',ssh}
但这并不会让事情变得更容易。
你总是可以创建一个函数
doall() {
cmd=$1; shift
for arg do
"$cmd" "$arg" || return
done
}
进而:
doall vagrant up ssh
答案3
不是直接的答案,但是,两个替代方案可能值得一看(太多了,无法发表评论):
别名
如果你重复使用一个命令,你可以在你的命令中添加一个别名
~/.bashrc
alias vassh="vagrant up && vagrant ssh"
命令行历史记录
Ctrl+R让您搜索以前的命令。这比使用变量要快得多......
答案4
v=vagrant; $v up && $v ssh
这可能接近您正在寻找的东西。
这是一个函数 - in bash
- 将打印当前复合命令的命令位置中的第一个单词:
rc() { $(set -f; unset IFS
set -- $(history 1)
IFS="(){};|'\\\"&#"
set \ $2;IFS=\ ;set -- $*
printf %s "$1") "$@"; }
这样你就可以这样做:
vagrant up && rc ssh
一个例子:
echo up && rc ssh
输出
up
ssh
或者...
set -x
(echo);rc 'times two'
输出
+ echo
+ rc 'times two'
++ set -f
++ unset IFS
+++ history 1
++ set -- 549 '(echo);rc' ''\''times' 'two'\'''
++ IFS='(){};|'\''\"&#'
++ set ' ' echo '' rc
++ IFS=' '
++ set -- echo rc
++ printf %s echo
+ echo 'times two'
times two