回答:
(t)csh
、bash
またはzsh
履歴の拡張を使用すると、次のように記述できます。
vagrant up && !#:0 ssh
しかし、真剣に、あなたはしません
!#:0
略かを説明していただけませんか。0を1、2、または任意の数に置き換えた場合、それは何を意味しますか?
!#
あなたが現在入力している行を参照し、:0
ライン(「浮浪者」)の最初の単語です。したがって!#:1
、「アップ」などになります
あなたがすることができます:
eval vagrant\ {'up &&',ssh}
しかし、それでは簡単にはなりません。
あなたはいつでも関数を作ることができます
doall() {
cmd=$1; shift
for arg do
"$cmd" "$arg" || return
done
}
その後:
doall vagrant up ssh
v=vagrant; $v up && $v ssh
それはあなたが探しているものに近いかもしれません。
以下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