Comment exécuter des scripts sans taper le chemin complet?

56

J'aimerais savoir s'il existe un moyen d'exécuter un script programme / shell sans taper le chemin complet:

/opt/idea/bin/idea.sh
Poorman_Patrick
la source
Vous pouvez toujours donner le chemin complet du fichier.
muru
Merci @muru, je le sais, mais c’est un programme que j’utilise souvent, j’aimerais donc pouvoir l’exécuter avec une simple commande, pas un long chemin de fichier.
Jonny
nufailm.blogspot.com/2012/05/… cela vous aidera pour une idée :)
dedunumax

Réponses:

60

Vous pouvez simplement créer un lien symbolique . Créez-le dans /usr/local/bin. Tout ce dont vous avez besoin est d’exécuter la commande:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

Après cela, vous devriez rendre votre fileexécutable:

chmod +x /full/path/to/your/file

Vous devriez maintenant pouvoir courir name_of_new_commandà tout moment dans votre terminal.

Notez que c'est une bonne solution uniquement pour une utilisation domestique de Linux.

c0rp
la source
11
Notez que vous ne devez pas placer de lien symbolique pointant /usr/local/binvers un script situé dans un dossier personnel privé, tel /home/jack/myscript.shque seul l'utilisateur étant jackgénéralement capable de l'exécuter. Le lien symbolique sera visible par les autres utilisateurs, mais pas le fichier vers lequel il pointe. Sur un système à utilisateur unique, cela n’importe peut-être pas, mais il est néanmoins "recommandé" de placer des scripts (ou des liens vers des scripts) que tous les utilisateurs peuvent lire /usr/local/bin, ainsi que des scripts privés, créés par l'utilisateur (ou des liens vers des scripts): un seul utilisateur dans leur ~/bindossier.
Malte Skoruppa
ajouter un lien symbolique dans / usr / sbin / le rend accessible de n'importe où
Seyfi
28

Vous pouvez ajouter /opt/idea/binà votre PATHvariable:

PATH=/opt/idea/bin:"$PATH"

Après cela, vous pouvez le lancer simplement idea.sh.

Vous voulez probablement ajouter cette ligne dans votre ~/.bashrcfichier.

janos
la source
2
aussi: si vous rendez le script exécutable, vous pouvez laisser l’extension .sh (en supposant que vous utilisiez le shebang en haut du script). simplement "idée" suffit alors.
Jacob Vlijm
1
@Jobob: vous ne pouvez pas laisser l'extension, car cela fait partie du nom de fichier de l'exécutable (ce n'est pas Windows, une telle magie cause d'autres problèmes). Pour appeler le script avec le nom idea, vous devez créer un lien ou un alias avec ce nom pointant vers le idea.shscript.
Jonathan Callen
2
@JonathanCallen Callen vous pouvez certainement! Pour que le script soit exécutable, supprimez l'extension .sh du nom de fichier et de la commande permettant de l'exécuter, étant donné que vous démarrez le script avec le shebang #! / bin / bash.
Jacob Vlijm
1
@Jobob ce que je veux dire , c'est que si vous ne renommez pas le fichier , vous ne pouvez pas (et il semble que cela fait partie d'un package logiciel plus important, vous ne devriez donc pas simplement renommer les fichiers)
Jonathan Callen
2
Merci @Jacob, remarquez qu'il est écrit "Lorsque les scripts sont installés dans un répertoire du système PATH" . Le idea.shscript n'est pas un tel script, en fait, le déplacer en dehors de son répertoire d'installation est complètement non pris en charge. Les règles d'emballage de Debian ne s'appliquent pas ici.
janos
15

Vous pouvez créer une fonction dans votre ~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

Ou vous pouvez créer un alias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

Dans les deux cas, vous pouvez le lancer en appelant:

$ some-name

Si le fichier ne dépend pas de l'endroit où il est exécuté, envisagez de l'ajouter à votre ~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/bin, s’il existe, est ajouté à votre $PATHautomatiquement. Ensuite, vous appelez directement file:

$ file

(Mauvais choix de nom, envisagez de l'appeler quelque chose de moins générique.)

muru
la source
@Oli donne toujours mes cinq minutes, j'ai tendance à ajouter des retraits. :) C'est juste embêtant car j'ai besoin de tromper l'éditeur pour utiliser Ctrl-K pour les retraits de second niveau.
muru
2
+1 en particulier pour la solution d’ajout fileà votre ~/bin, comme je le fais habituellement (pour des scripts plus longs). J'aurais probablement même mis celui-ci en haut :) Les alias sont bons pour les raccourcis vers les commandes avec certains paramètres, par exemple alias l='ls -CF'. Bien que j'ai vu des utilisations beaucoup plus impressionnantes de pseudonymes . Je n'ai pas tendance à déclarer des fonctions dans ~/.bashrc(je préfère avoir tous mes scripts organisés dans des fichiers séparés dans ~/bin). Bien que tout cela soit une question de goût, je suppose :)
Malte Skoruppa le
@MalteSkoruppa Je viens de privilégier les méthodes qui se prêtent le mieux cd, car le script peut dépendre du répertoire de travail. :) Sinon, oui, j'ai tendance à mettre des fichiers en ~/binmoi.
muru
10

Vous pouvez créer un lanceur en utilisant la commande suivante:

gnome-desktop-item-edit --create-new <path-where-to-save>. Je vais ouvrir cette fenêtre.

entrez la description de l'image ici

Nommez-le comme bon vous semble et dans le type de boîte de commande suivant

sh -c '/opt/idea/bin/idea.sh' et enregistrez-le.

Maintenant, vous pouvez exécuter ce fichier en utilisant le lanceur nouvellement créé

OU

Vous pouvez créer un fichier .desktop avec le contenu suivant

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

Maintenant, enregistrez-le avec .desktopextension sur n'importe quel endroit.

Le rendre exécutable avec cette commande chmod a+x <your-desktop-file>

Maintenant, double-cliquez pour l'ouvrir.

g_p
la source
7

Nous pouvons définir une fonction et un raccourci clavier Add en utilisant la bindcommande pour l'appeler. Ouvrez le ~/.bashrcfichier et ajoutez-y cette ligne:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

Maintenant, lorsque vous appuyez sur F12, votre programme sera lancé.

Remarque: Un moyen rapide de déterminer le code d'échappement:

Ouvrez votre terminal et appuyez sur Ctrl+ V. Maintenant, appuyez sur votre raccourci clavier préféré. Le code d'échappement correct devrait apparaître. Assurez-vous simplement de remplacer ^[par \eavant d’ajouter le raccourci à, par exemple, remplacez ^[[24~par \e[24~.

αғsнιη
la source
7

Nous pouvons également exécuter le /opt/idea/bin/idea.shfichier directement en utilisantbash_aliases

Ouvrir le ~/.bashrcfichier en cours d'exécution,

gedit ~/.bashrc

Supprimez le #avant les lignes et enregistrez-le, de sorte que les lignes ressemblent,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Maintenant, ouvrez le ~/.bash_aliasesfichier,

gedit ~/.bash_aliases

Ajoutez les lignes ci-dessous dans ce fichier et enregistrez-le,

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

Enfin, sourcez le ~/.bashrcfichier,

source ~/.bashrc

Maintenant, vous pouvez exécuter le /opt/idea/bin/idea.shfichier directement par,

idea
Avinash Raj
la source
5

En plus des autres bonnes réponses, pensez à créer des liens symboliques dans ~/.local/binet ajoutez ce répertoire à votre PATH (à partir de votre .bashrcexemple). Cette méthode ne nécessite pas d'autorisations spéciales (contrairement aux liens symboliques vers /usr/local/bin, par exemple). De cette façon, vous pouvez avoir une structure de répertoire standard sans inonder votre $ HOME. En savoir plus à ce sujet sur ces https://unix.stackexchange.com/ questions:

abstrus
la source
1

Créez un lien /usr/binsymbolique de celui-ci dans direcotyr:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

Maintenant, lancez le en utilisant:

idea.sh
J.Franks
la source
0

Ou vous pouvez simplement utiliser

nano ~/.bashrc

et ajouter

PATH=/full/path/to/file:"$PATH"

à la fin, sauvegardez et quittez. Ensuite, vous pouvez simplement taper le nom du fichier.

Aide le débutant
la source
0

J'ai suivi toutes les réponses ici et à d'autres endroits et si peu omettent de mentionner que vous devrez peut-être vous déconnecter pour que la commande fonctionne éventuellement.

Pour récapituler, en particulier pour Xubuntu , mais pour d’autres variantes de Debian / Ubuntu, j’ai également écrit ces instructions simples.

(Dans les instructions suivantes, nous utilisons le répertoire ~ / bin , car c’est automatiquement un emplacement à partir duquel les systèmes d’exploitation recherchent des commandes. Voir ici :

Instructions à toute épreuve pour que votre commande fonctionne:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
Manu Järvinen
la source