很多时候,我需要快速键入一些字符行(例如,为了简化数学表达式),然后丢弃整个内容。当然,我通常会在文本编辑器中运行几个运行的会话,并且可以在其中进行。我也一直在使用以下系统;我输入echo "
一个终端(运行bash),然后输入任何内容。完成后,我输入close "
。
昨天,我决定在自己.bashrc
的内容中添加一些更优雅的内容,并创建了以下别名:
# write junk on the terminal (stop with a line containing only "." )
# alias scratch="awk '/^\.$/{exit}'"
# alias scratch="sed -ne '/^\.$/q'"
alias scratch='grep -q "^\.$"'
您可以看到上面的三个变体在执行相同的操作:我键入scratch
,然后键入想要键入的任何内容,最后以仅包含.
(点)的一行结束。
我对此感到非常满意,但我也想到了以下变体:
alias scratch="cat - > /dev/null << ."
>
在每一行的开头都使用初始提示执行相同的操作。
然后,我想知道如何使用PS2
环境变量来更改此提示,而我什么也无法正常工作。当然,PS2
完成后应该恢复当前提示。如何scratch
仅在“临时”会话期间将别名的此变体形式的提示设置为任意字符串?
我不完全确定这对什么有用(与相比nano
,vim
或者您喜欢的任何编辑器),但是...它是否需要别名?
$ <<.
> foo
> bar
> baz
> .
只是"
会更短,但会出现错误消息...
$ "
> oh
> ah
> ui
> "
bash: $'\noh\nah\nui\n': command not found
请注意,这些事情并没有真正消失。
$ history
497 <<.
foo
bar
baz
.
如果那让您感到困扰,请先禁用历史记录,然后再清除它。
对于自定义PS2提示,这很困难,因为(至少对于Bash而言)必须将其设置为父shell。如果在子外壳中设置它,它将被忽略。您可以通过启动像这样的显式shell实例来解决该问题。
$ PS1=@_ PS2=:_ bash --norc
@_<<.
:_hey
:_.
@_exit
$
但是在这一点上,编写专用的暂存和丢弃程序会更有意义。
不同的方法,根本不使用PS2提示符:
$ while read -p ":-> " ; do : ; done
:-> hey
:-> how
:-> do
只有您不能使用“。” 离开这里。好吧,您可以轻松地将其添加为条件...
$ alias scratch='(var=_; while read -r -p ":-> " var; do [ "$var" == . ] && break; done)'
$ scratch
:-> a
:-> b
:-> c
:-> .
但是,您也可以通过发送EOF和Ctrl+退出D。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句