我可以在“&&”之前、“&&”之后引用命令吗

我可以在“&&”之前、“&&”之后引用命令吗

不知道如何表达这个问题,但基本上,我经常发现自己运行一个命令,比如vagrant启动虚拟机,然后 ssh 进入它,如下所示:

vagrant up && vagrant ssh

除了编写自己的函数或脚本之外,有没有办法“重用”vagrant命令第二部分中的部分?

答案1

随着(t)csh,bashzsh历史扩展你可以写:

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

不是直接的答案,但是,两个替代方案可能值得一看(太多了,无法发表评论):

  1. 别名

    如果你重复使用一个命令,你可以在你的命令中添加一个别名~/.bashrc

    alias vassh="vagrant up && vagrant ssh"
    
  2. 命令行历史记录

    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

相关内容