「&&」の前と「&&」の後にコマンドを引用できますか?

「&&」の前と「&&」の後にコマンドを引用できますか?

この質問をどのように表現するかはわかりませんが、基本的に仮想vagrantマシンを起動してから、次のようにsshを実行するなどのコマンドを実行することがよくあります。

vagrant up && vagrant ssh

vagrant関数やスクリプトを直接書くだけでなく、コマンドの2番目の部分を「再利用」する方法はありますか?

答え1

(t)cshbashまたは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

直接的な答えではありませんが、2つの選択肢を見る価値があります(説明するには多すぎます)。

  1. ニックネーム

    コマンドを再利用する場合は、コマンドにエイリアスを追加できます。~/.bashrc

    alias vassh="vagrant up && vagrant ssh"
    
  2. コマンドライン履歴

    Ctrl+R前のコマンドを検索できます。変数を使用するよりもはるかに高速です。

答え4

 v=vagrant; $v up && $v ssh

これはあなたが探しているものに近いかもしれません。

bash以下は、現在複合コマンドのコマンド位置にある最初の単語を印刷する関数inです。

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

関連情報