Answers:
随着(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
-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