2013-08-26 68 views
0

假设我创建了一个名为customcmd,对于每一个后续命令运行创造bash脚本

我希望它这样,如果我在customcmd键入到终端,每一个后续的命令下它也将执行命令我自己的bash脚本customcmd

所以想我做

>customcmd 
>param1 
>param2 
>param3 

我想这是

>customcmd 
>customcmd param1 
>customcmd param2 
>customcmd param3 
相当于

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

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

+0

这个想法很简单,但您打算如何退出customcmd模式?我想每个人在看到这个评论后都已经知道你真正想要的东西了。 – konsolebox

回答

3

如果我正确理解你的问题,我会做到以下几点:

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

#!/bin/bash 

while [[ 1 ]]; do 

    read _INPUT 
    echo $_INPUT 

done 
  1. 初始化一个无限循环
  2. 为每次迭代都会得到用户输入(不管它是什么),并通过在while循环中指定的命令来运行它(如果脚本需要解析多个参数,则可以将我们的echo与函数那可以处理的)

希望有帮助!

0

这可能是您的一种形式。

#!/bin/bash 

shopt -s extglob 

function customcmd { 
    # Do something with "[email protected]". 
    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 "[email protected]". 
     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]},但其他人会不同意使用前者,因为它是不那么“documentive”,但每一个工具都有自己的传统公认这些人可以像Awk中的黑客一样允许黑客入侵,而不是任何Wiki或者他认为是更老的Bash用户可以规定哪些应该成为标准。