从字符串中运行bash命令



我有一个名为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 
}

最新更新