0

假设我使用名为 customcmd 的命令创建了自己的 bash 脚本

我想要它,这样如果我在终端中输入 customcmd,它后面的每个后续命令也将执行 customcmd

所以假设我这样做

>customcmd
>param1
>param2
>param3

我希望这相当于

>customcmd
>customcmd param1
>customcmd param2
>customcmd param3

IE。我希望通过执行一次customcmd,我不必再次输入customcmd,并且我希望命令行解析我之后输入的每一个命令,以自动成为customcmd的参数......

在编写 bash 脚本时如何实现这一点?

4

2 回答 2

3

如果我正确理解您的问题,我会执行以下操作:

创建一个脚本,例如mycommand.sh:

#!/bin/bash

while [[ 1 ]]; do

  read _INPUT   
  echo $_INPUT

done
  1. 初始化一个无限循环
  2. 对于每次迭代,获取用户输入(无论它是什么)并通过您在 while 循环中指定的命令运行它(如果您的脚本需要解析多个参数,您可以将我们的 echo 与可以处理的函数交换)

希望有帮助!

于 2013-08-26T05:46:33.260 回答
0

这可能是您的一种形式。

#!/bin/bash

shopt -s extglob

function customcmd {
    # Do something with "$@".
    echo "$*"
}

while read -er INPUT -p ">" && [[ $INPUT != *([[:blank:]]) ]]; do
    if [[ $INPUT == customcmd ]]; then
        customcmd
        while read -er INPUT -p ">" && [[ $INPUT != *([[:blank:]]) ]]; do
            customcmd "$INPUT"
        done
    fi
done

或这个:

#!/bin/bash

shopt -s extglob

function customcmd {
    if [[ $# -gt 0 ]]; then
        # Do something with "$@".
        echo "$*"
    else
        local INPUT
        while read -er INPUT -p ">" && [[ $INPUT != *([[:blank:]]) ]]; do
            customcmd "$INPUT"
        done
    fi
}

while read -era INPUT -p ">" && [[ $INPUT != *([[:blank:]]) ]]; do
    case "$INPUT" in
    customcmd)
        customcmd "${INPUT[@]:2}"
        ;;
    # ...
    esac
done

** 在数组$INPUT中等同于${INPUT[0]},尽管其他人不同意使用前者,因为它的“文档性”较少,但每个工具都有自己传统上接受的 hack,就像 Awk 中的那些 hack,而不是任何 Wiki 或他谁认为是更资深的 Bash 用户可以决定哪个应该是标准的。

于 2013-08-26T07:56:25.610 回答