创建为每个后续命令运行的bash脚本

时间:2013-08-26 05:35:53

标签: linux bash command-line terminal

假设我使用名为customcmd

的命令创建了自己的bash脚本

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

所以假设我这样做

>customcmd
>param1
>param2
>param3

我希望这相当于

>customcmd
>customcmd param1
>customcmd param2
>customcmd param3

即。我希望它是这样的,通过执行customcmd一次,我将不必再次输入customcmd并且我想让命令行解析我之后键入的每个命令,以自动成为customcmd的参数......

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

2 个答案:

答案 0 :(得分:3)

如果我理解你的问题,我会做以下事情:

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

#!/bin/bash

while [[ 1 ]]; do

  read _INPUT   
  echo $_INPUT

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

答案 1 :(得分: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]},虽然其他人不同意使用前者,因为它不那么“文档化”,但是每个工具都有他们自己传统上接受的黑客,同样的人会允许就像Awk中的那些黑客一样,而不是任何一个Wiki或者他认为是更老练的Bash用户可以决定哪个应该是标准的。