开发者问题收集

如何在 Jquery 终端中获取完全正常工作的“echo”命令?

2023-11-18
155

我试图获取 echo 命令以回显用户在 JQuery 终端中键入的内容。

这是我的代码

<link href="https://unpkg.com/jquery.terminal/css/jquery.terminal.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://unpkg.com/jquery.terminal/js/jquery.terminal.min.js"></script>

<script>
$('body').terminal({

  echo: function(...args) {
      this.echo(args)
  },


}, {
    checkArity: false,
   
    prompt: '>>> ',
      strings: {
      commandNotFound: "-Error: unknown command: %s",
      echoCommand: true,
      wrongArity: "'%s' is missing one or more arguments",
    },
    pasteImage: true,
      
});
</script>

我尝试使用 ...args 方法,但当我这样做时,它会显示我输入的内容,但在它们之间添加一堆空格。例如,如果我输入:“echo hi bro how are you :)”,它将返回我在 this.echo 中所说的内容,内容相同,但每个单词之间有 4 个空格。

我如何删除这些空格,以便它直接显示用户输入的内容。

2个回答

查看 jQuery Terminal 库,它似乎表现得与预期一致。

命令后输入的任何内容都被视为参数。jQuery 终端的 echo 函数会将该对象转换为可读输出(制表符分隔)。

如果输入以下内容,则每个单词都被视为 echo 命令的一个参数

>>> echo this is just a text
`this` is the first argument
`is` is the second argument
`just` is the third argument
etc...

您必须引用要回显的文本,就像任何终端一样。

echo "this is just a text"

或者您必须加入所有参数,但它会删除单词之间的空格。

echo: function(...args) {
   this.echo(args.join(" "));
}

这将产生以下输出

>>> echo this is just a text
this is just a text

>>> echo this   is   just    a text
this is just a text

>>> echo "this    is just    a"     text
this    is just    a text
Leroy
2023-11-19

@Leroy 的回答是正确的,对象解释器带有方法,为您解析命令,每个命令行参数都是方法参数。

您有两个选项可以使用

  • args.join(' ') 和 rest 运算符 (...args) 。为了使其工作,可能需要使用 processArguments: false 选项,因此数字等参数不会转换为实数。
  • this.get_command() 并自行解析命令(如果您关心参数之间的空格)。

您可以使用此代码来解析命令。如果您关心空格,使用函数作为解释器可能更容易,这样您可以更好地控制。

<link href="https://unpkg.com/jquery.terminal/css/jquery.terminal.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://unpkg.com/jquery.terminal/js/jquery.terminal.min.js"></script>

<script>
$('body').terminal(function(command) {
    const cmd = $.terminal.parse_command(command);
    if (cmd.name == 'echo') {
        this.echo(cmd.rest);
    } else {
        this.error(`-Error: unknown command: ${cmd.name}`);
    }
}, {
    checkArity: false,
   
    prompt: '>>> ',
      strings: {
      commandNotFound: "-Error: unknown command: %s",
      echoCommand: true,
      wrongArity: "'%s' is missing one or more arguments",
    },
    pasteImage: true,
      
});
</script>
jcubic
2023-11-19