Réponses:
Sous Linux, UNIX et les systèmes d'exploitation associés, .
désigne le répertoire actuel. Puisque vous voulez exécuter un fichier dans votre répertoire actuel et que ce répertoire ne se trouve pas dans votre $PATH
, vous avez besoin du ./
bit pour indiquer au shell où se trouve l'exécutable. Donc, ./foo
signifie exécuter le fichier exécutable appelé foo
qui se trouve dans ce répertoire.
Vous pouvez utiliser type
ou which
pour obtenir le chemin complet de toutes les commandes trouvées dans votre $PATH
.
alias
es qui peuvent gêner, pas seulement $PATH
.
.
premier, il s'agirait d'un problème de sécurité. Vous ou une autre personne pourriez ls
par exemple le remplacer (un simple virus / trojen: créez un fichier zip avec un exécutable nommé ls
, pendant que quelqu'un effectue une recherche. , ils exécutent cet exécutable, ça…). Si la recherche a été effectuée en .
dernier, vous pouvez passer beaucoup de temps à devenir fou en ne sachant pas pourquoi votre programme ne fonctionne pas (par exemple, vous créez un programme appelé test, au lieu d'exécuter votre programme, il exécute le programme de test du système. Ce qui ne produit aucun résultat).
export PATH="$PATH:."
pour exécuter une commande dans le répertoire en cours s’il n’est pas trouvé ailleurs dans PATH, vous pouvez l’ajouter dans votre fichier .bashrc
La réponse littérale est la même que celle donnée par d’autres: parce que le répertoire actuel n’est pas dans votre $PATH
.
Mais pourquoi En bref, c'est pour la sécurité. Si vous cherchez dans le répertoire personnel de quelqu'un (ou / tmp), et tapez juste gcc
ou ls
, vous voulez savoir que vous utilisez le vrai, pas une version malicieuse que votre ami farceur a écrite et qui efface tous vos fichiers. Un autre exemple serait test
ou [
, qui pourrait remplacer ces commandes dans des scripts de shell, si votre shell n'en contient pas.
Avoir .
comme dernière entrée sur votre chemin est un peu plus sûr, mais il y a d'autres attaques qui l'utilisent. Une solution simple consiste à exploiter les fautes de frappe courantes, comme sl
ou ls-l
. Vous pouvez également rechercher une commande commune qui n'est pas installée sur ce système vim
, par exemple, car les administrateurs système ont une probabilité supérieure à la moyenne de la taper.
PATH
variable d'environnement.
Si vous voulez dire, pourquoi avez-vous besoin de ./ au début - c'est parce que (contrairement à Windows), le répertoire actuel ne fait pas partie de votre chemin par défaut. Si vous courez:
$ ls
votre shell cherche ls
dans les répertoires de votre variable d'environnement PATH ( echo $PATH
pour la voir) et exécute le premier exécutable appelé ls
qu'il trouve. Si vous tapez:
$ a.out
le shell fera de même - mais il ne trouvera probablement pas d’exécutable appelé a.out. Vous devez dire au shell où se trouve a.out - si c'est dans le répertoire en cours (.) Puis le chemin est ./a.out
.
Si vous demandez pourquoi il s'appelle "a.out", c'est simplement le nom du fichier de sortie par défaut pour gcc. Vous pouvez le changer avec l'argument de ligne de commande -o. Par exemple:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
de voir ça.)
<dir>/<file>
vous dites donc essentiellement exécuter un fichier dans le répertoire actuel, ce qui est indiqué par./test
Vous pouvez essayer d’ajouter :.
à votre variable $ PATH.
Essayez ALT + F2 et tapez: gksudo gedit /etc/environment
si vous utilisez Linux / GTK (c'est ce que vous avez si vous utilisez Ubuntu).
Cependant, je vous déconseille vivement de le faire. C'est mauvais, mauvais, mauvais.
Vous savez, ce genre de choses fonctionne de la sorte depuis 1970. Il y a une raison pour laquelle le répertoire actuel n'est pas inclus dans le $ PATH.
.
est le répertoire courant
.something
serait un fichier caché (tapez "ALT +" pour les faire apparaître dans Nautilus, ou essayez " ls -la
".
./someProgram.sh
est ce que vous tapez pour exécuter un exécutable someProgram.sh dans le répertoire en cours.
.somethingElse
signifierait que vous avez un exécutable caché dans le répertoire en cours, ce qui est une mauvaise idée.
./command_name
pour exécuter une commande sous Linux?"