2013-08-26 2 views
0

Supposons que je crée mon propre script bash avec une commande appelée customcmdcréation script bash qui exécute pour chaque commande subséquente

Je veux donc que si je tape customcmd dans le terminal, toutes les commandes ultérieures suivantes, il exécutera également customcmd

suppose que oui je

>customcmd 
>param1 
>param2 
>param3 

Je veux que ce soit l'équivalent de

>customcmd 
>customcmd param1 
>customcmd param2 
>customcmd param3 

ie. Je veux qu'il en soit ainsi en exécutant customcmd une fois, je n'aurai pas à taper de nouveau customcmd et je veux avoir la ligne de commande analyser chaque commande que je tape après pour être automatiquement des paramètres à customcmd ...

Comment puis-je y parvenir en écrivant le script bash?

+0

L'idée est simple mais comment prévoyez-vous de quitter le mode customcmd par la suite? Et je pense que tout le monde a déjà une idée de ce que vous voulez vraiment après avoir vu ce commentaire. – konsolebox

Répondre

3

Si je comprends bien votre question, je fais ce qui suit:

Créer un script, par exemple mycommand.sh:

#!/bin/bash 

while [[ 1 ]]; do 

    read _INPUT 
    echo $_INPUT 

done 
  1. initialiser une boucle infinie
  2. pour chaque itération, obtenez l'entrée de l'utilisateur (quelle qu'elle soit) et exécutez-la via la commande que vous spécifiez dans la boucle while (si votre script doit analyser plusieurs arguments, vous pouvez échanger notre écho avec une fonction qui peut gérer cela)

Hope that helps!

0

Cela pourrait être l'une de vos formes.

#!/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 

Ou ceci:

#!/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 

** Dans les tableaux $INPUT est équivalente à ${INPUT[0]}, bien que d'autres personnes seraient en désaccord en utilisant l'ancien car il est moins « documentive », mais chaque outil a sa propre tradition acceptée hacks que les mêmes personnes permettraient juste comme ces hacks dans Awk, et pas n'importe quel Wiki ou celui qui pense est un utilisateur vétéran de Bash pourrait dicter ce qui devrait être standard.

Questions connexes