在bash中,我想实现以下工作流程(括号中显示提示,_
是光标):
$ foo_
)function foo() { printf "hello from foo" }
$ foo _
)hello from foo
- 无新行($ foo hello from foo_
)$ foo _
)我试过了:
0x0a
(返回)到终端仿真器(Mac上的iTerm2)。这有效,除了它显然也打印换行符complete -F foo -o nospace foo
。这有效,但我必须输入foo
然后SPACE
然后TAB
输入hello from foo
以便内联打印\n
- 吃脚本嵌入PS1
。真的不知道如何开始使用那个。我还可以捕获一个快捷方式,例如Ctrl+T
来执行foo - 但我真的只想按SPACE
。
理想情况下,空格只会对输入终端的第一个单词表现得这样。任何帮助将不胜感激,请保存我的理智。
为什么在这个世界上我需要这个:(我真的很棒)我有一个类似emacs的ido脚本,当我输入cd
时我想调用它然后是SPACE
。
答案 0 :(得分:0)
执行此操作的方法是将-n 1与read一起使用。例如:
foo(){
echo hello from foo
}
string=''
while read -n 1 a ; do
if [ "$a" = "" ] ; then
tpe=`type -t $string`
if [ "$tpe" = "function" ] ; then
$string
fi
string=''
else
string="$string$a"
fi
done