2009-09-03 6 views
1

je souhaite accomplir ce qui suit:message d'affichage sur commande « production cd »

Si j'execute « production cd » sur l'invite bash, je devrais aller dans le répertoire et un message doit être affiché « Vous êtes dans la production ", afin que l'utilisateur soit averti.

+0

Une question similaire ici: http://unix.stackexchange.com/questions/18532/show-message-when-cd-into-specific-directory –

Répondre

4

Vous pouvez le faire en exécutant les opérations suivantes dans le contexte du shell (par exemple, .bashrc).

xcd() { 
    if [[ "$1" == "production" ]] ; then 
     echo Warning, you are in production. 
    fi 
    builtin cd $1 
} 
alias cd=xcd 

Cela crée une fonction alors alias la commande cd à cette fonction. La fonction elle-même fournit l'avertissement puis appelle le vrai cd.

Une meilleure solution, peut cependant être de détecter les chemins réels, puisque la solution que vous avez demandé vous donnera un faux positif pour "cd $HOME ; cd production" et faux négatifs pour "cd /production/x" (si /production était en effet la zone dangereuse).

je ferais quelque chose comme:

#!/bin/bash 
export xcd_warn="/home/pax /tmp" 
xcd() { 
    builtin cd $1 

    export xcd_path=$(pwd) 
    for i in ${xcd_warn} ; do 
     echo ${xcd_path}/ | grep "^${i}/" 
     if [[ $? -eq 0 ]] ; then 
      echo Warning, you are in ${i}. 
     fi 
    done 
} 
alias cd=xcd 

qui vous permettra de configurer les répertoires de danger de niveau supérieur comme des chemins absolus.

+0

Cela fait ce que l'utilisateur a demandé, mais je pense que ce qu'ils * ont besoin * est quelque chose de différent; ils devraient se soucier s'ils sont réellement dans le répertoire de production, pas si ils ont juste émis une commande 'cd' pour y arriver - s'ils sont entrés par l'intermédiaire d'un pushd à la place, les données sont tout aussi sensibles. –

+0

vous avez oublié le 'k' dans xcd() – mpen

+0

@Mark, assurez-vous d'ajouter le smiley la prochaine fois - il a fallu quelques secondes de chercher l'erreur avant de me rappeler ce que xkcd était :-) D'Oh! – paxdiablo

8

Ne le faites pas de cette façon. :)

Ce que vous voulez vraiment savoir n'est pas si l'utilisateur vient d'entrer dans le répertoire 'production' via une commande cd; Ce que vous voulez vraiment savoir, c'est si vous modifiez les données de production, et comment vous y êtes arrivé (cd, pushd, popd, ouvrir un shell à partir d'un processus parent dans ce répertoire) n'est pas pertinent.

Il est donc beaucoup plus logique que votre shell affiche un avertissement désagréable lorsque vous êtes dans le répertoire de production.

function update_prompt() { 
    if [[ $PWD =~ /production(/|$) ]] ; then 
    PS1="\[email protected]\h \w [WARNING: PRODUCTION] $" 
    else 
    PS1="\[email protected]\h \w $" 
    fi 
} 
PROMPT_COMMAND=update_prompt 

N'hésitez pas à remplacer les chaînes en question avec quelque chose de beaucoup plus coloré.

Questions connexes