7 votes

Puis-je raccourcir mes commandes de répertoire dans Ubuntu ?

Lorsque je travaille sur une application Rails, j'aime ouvrir tous mes fichiers via la ligne de commande, comme suit

CD my_app
gedit app/views/user/show.HTML.erb

Y a-t-il un moyen de raccourcir cela pour que je puisse juste écrire quelque chose comme

gedit  user_views/show.HTML.erb

?

Je voudrais que la console reste dans le répertoire principal, mais je n'aime pas avoir à taper app/controller/user_controler.rb chaque fois que je veux ouvrir le contrôleur utilisateur. Je sais que je pourrais simplement ouvrir le fichier avec ma souris, mais j'ai l'impression que passer du clavier à la souris me déconcentre un peu. Lorsque je peux simplement taper sur le clavier, j'ai l'impression que le flux de travail est plus fluide.

3voto

Micheal Earl Points 41

Peut-être créer un lien symbolique à partir du répertoire principal.

ln -s app/views/user/ user_views

créera un lien symbolique dans votre répertoire principal/de travail qui mettra à jour les fichiers dans app/views/user. Ainsi, en faisant un ls -l affichera quelque chose comme :

user_views -> app/views/user/

de cette façon, vous pourriez juste aller

$ gedit user_views/show.html.erb

Vous pouvez également envisager de définir simplement une variable

comme

$ VIEWS='app/views/user/'

ce qui vous permettrait d'aller

$ gedit $VIEWS/show.html.erb

vous pourriez envisager de mettre cela dans votre profil bash pour ne pas avoir à le redéfinir à chaque session.

plus sur les liens symbliques

plus sur le profil bash et en définissant une variable d'environnement.

EDIT

En rentrant chez moi, je me suis demandé pourquoi quelqu'un voudrait un lien symbolique pour sauter un seul répertoire ?

/apps/ vues /utilisation

dans ce cas, le vues dir. Savez-vous ce que fera l'onglet ?

Je me souviens qu'il m'a fallu quelques mois pour apprendre cette astuce pratique.

Tapez quelque chose comme ce qui suit et appuyez sur la touche tabulation

$ gedit a

appuyez sur la touche tab, et il est probable que l'application se termine en vous laissant avec

$ gedit app/

tapez v et appuyez sur tabulation à nouveau, vous obtiendrez probablement

$gedit app/views/

appuyez deux fois sur la touche tabulation pour afficher tous les choix possibles. Cela fonctionne aussi bien pour les utilitaires que pour les répertoires et les fichiers.

Dactylographie

$ ged

et en appuyant sur la touche tabulation, vous terminerez gedit. Cela devrait vous accélérer un peu.

2voto

David W. Points 21

Je ne sais pas si cela peut aider, mais il y a une variable Shell très rarement utilisée appelée CDPATH . CDPATH est très proche de la PATH pour les commandes. Lorsque vous faites un cd il recherche dans le CDPATH pour les répertoires qui correspondent à votre CDPATH .

Par exemple :

CDPATH=.:/usr/local:$HOME/projects

Si je l'ai fait :

cd jiff/source

La commande CD recherchera un ./jiff/source alors a /usr/local/jiff/source puis un $HONE/projects/jiff/source répertoire. S'il y a un $HOME/projects/jiff/source le répertoire sera remplacé par celui-ci.

Cela ne résoudra pas votre problème où vous pouvez simplement taper un chemin partiel et faire exécuter votre commande, mais vous pourriez dire ajouter myapp/app/view à votre CDPATH et faites ceci :

$ cd user
$ gedit show.html.erb

L'autre chose que vous pouvez faire est d'aliaser le fichier gedit pour _gedit et ensuite écrire un Shell Shell rapide pour prendre le "nom du fichier", chercher une arborescence de répertoire qui correspond à ce que vous avez mis, et ensuite éditer le fichier. C'est quelque chose que les utilisateurs de Kornshell font pour obtenir l'équivalent de la commande PS1=\u@\h:\w PS que vous, utilisateurs de BASH, avez. Ajoutez quelque chose comme ceci à votre .bashrc fichier :

alias _gedit=gedit

function gedit {
    fileName=$(basename $0)
    dirName=$(dirname $0)
    for directory in app/controller my_app/app/view
    do
       if [[ -d "$directory/$dirName" ]]
       then
           $directory/$0
           break
       fi
   done
}

Maintenant, si vous avez tapé gedit user_controler.rb et il y a un fichier app/controler/user_controler.rb il va éditer app/controller/user_controler.rb

2voto

dogbane Points 4201

Jetez un coup d'œil à Naviguer efficacement dans les répertoires sous Unix qui contient quelques fonctions et alias Bash utiles.

1voto

Eric3 Points 302

Avez-vous envisagé d'utiliser les variables Shell ?

user@localhost $ USERVIEWS='app/views/user/'
user@localhost $ gedit $USERVIEWS/show.html.erb

1voto

Robert Vabo Points 158

Si vous avez des noms de fichiers uniques, vous pouvez juste faire

gedit $(find -name show.html.erb)

Le find cherchera par défaut dans le répertoire courant, et $() est équivalent aux backticks, sauf que les backticks sont une fonctionnalité Shell dépréciée dans la plupart des shells modernes. ;)

Vous pourriez, bien sûr, raccourcir encore plus cela avec un Shell Shell du genre de celui qui suit

#!/bin/sh
gedit $( find -name "$1" )

Et vous pouvez remplacer -name par -iname pour vous éviter d'avoir à utiliser la touche majuscule si vos noms de fichiers sont en majuscules.

Je ne sais pas comment gedit se comporte avec plusieurs arguments (au cas où vous n'auriez pas des noms de fichiers complètement uniques), mais avec vim, il parcourt les fichiers un par un. Donc vous devez juste ":q" jusqu'à ce que vous arriviez à celui que vous voulez. Je m'attendrais à ce que gedit ouvre plusieurs onglets si vous avez plusieurs noms. Mais je n'utilise pas les éditeurs graphiques pour la même raison que vous ne voulez pas utiliser la souris pour ouvrir le fichier ;)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X