我有一个名为st
的函数,让我更改终端的名称,以便了解终端会话正在做什么。
function st() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="[e]2;$*a]"
PS1=${ORIG}${TITLE}
}
因此,当我运行st yarn transportation start
时,我的终端的标题将更改为yarn transportation start
。到目前为止还不错。
我对bash了解不多。但让我痛苦的是,我现在必须运行yarn transportation start
才能真正运行该命令。在标题更改后,有什么方法可以在st
之后运行任何内容吗?
我想运行一个命令来更改终端的标题,并运行我在标题中给出的命令
设置title(设置PS1
(后,需要确保使用正确的TITLE
,以便运行正确的命令。
正如如何执行存储为带引号和星号的字符串的bash命令中所指出的,有一个eval函数可以从字符串中运行命令。
$ type st
type st
st is a function
st ()
{
if [[ -z "$ORIG" ]]; then
ORIG=$PS1;
fi;
TITLE="[e]2;$*a]";
PS1=${ORIG}${TITLE};
TITLE="$*"; # Take all the arguments
eval $TITLE
}
你甚至可以在-t
标志上提供一个单独的标题和命令,就像下面的一样
function st() {
TITLE=$*
COMMAND=$*
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
if [ "$1" == "-t" ]; then
TITLE=$2;
COMMAND=${@:3}
fi
TITLE="[e]2;$TITLEa]"
PS1=${ORIG}${TITLE}
eval $COMMAND
}