Exemples de lignes de commande de commande de bash utile - Partie 4
- 1118
- 338
- Anaïs Charles
Poursuivant notre série sur les conseils et astuces de ligne de commande de bash utiles, dans l'article d'aujourd'hui, nous explorerons uniquement ce dont vous avez besoin, et commencer avec une introduction PWD
et comment découvrir le chemin du script à partir de.
Dans ce tutoriel, vous apprendrez:
- Conseils, astuces et méthodes utiles de la ligne de commande bash
- Comment interagir avec la ligne de commande bash de manière avancée
- Comment affiner vos compétences de bash dans l'ensemble et devenir un utilisateur de bash plus compétent
Exigences et conventions logicielles utilisées
Catégorie | Exigences, conventions ou version logicielle utilisée |
---|---|
Système | Indépendant de la distribution Linux |
Logiciel | Ligne de commande bash, système basé sur Linux |
Autre | Toute utilité qui n'est pas incluse dans le shell bash par défaut peut être installée en utilisant Sudo Apt-Get Install Utility-Name (ou Installation de miam pour les systèmes basés sur Redhat) |
Conventions | # - nécessite que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande$ - exige que les commandes Linux soient exécutées en tant qu'utilisateur régulier non privilégié |
Exemple 1: répertoire de travail du chemin? Ou non?
Nous pouvons être habitués à appeler PWD
sur la ligne de commande pour nous dire le nom de notre répertoire actuel:
$ pwd / home / roel / espace de travail
Mais si nous voulons obtenir le répertoire à partir du démarrage d'un script, en utilisant cette variable à partir d'un script, fonctionne également de la même manière?
$ Cat test_pwd.sh #!/ bin / bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2"
Copie Nous utiliserons deux façons pour récupérer le chemin: nous regardons (pour le premier My_path1
affectation) au PWD
(Niveau du système d'exploitation) Variable de présidence automatique et dans le deuxième cas (pour la seconde My_path2
affectation) nous exécutons PWD
Dans une sous-coquille ($ (…)
) et l'attribuer à My_path2
. Exécutons la même chose:
$ ./ test_pwd.sh / home / roel / workpace / home / roel / workspace
Ça a l'air bien, bien? Oui, peut-être, mais une fois que nous nous transformons en un autre répertoire et appelons le script en utilisant son nom de chemin complet ou relatif, le PWD
variable (ou le PWD
Commande) À l'intérieur du script renverra le répertoire dans lequel nous étions lorsque le script a été démarré. Vérinons ceci:
$ mkdir test $ cd test $… / test_pwd.sh / home / roel / workspace / test / home / roel / workspace / test
Ce que nous pouvons voir ici, c'est que PWD
(ou la $ Pwd
variable) renvoie toujours le chemin actuel réel.
Cela peut être un problème: nous pouvons vouloir démarrer un indice, ou accéder à un fichier, à partir du même répertoire (ou un sous-répertoire) que celui où se trouvait le script. C'est souvent le cas pour des scripts bash plus complexes qui appellent plusieurs indices et / ou données et fichiers de configuration.
Alors, quelle est une façon uniforme d'obtenir le Chemin d'où le script a été démarré?
On peut envisager d'utiliser le dirname "\ 0 0"
commande:
$ Cat test2.sh #!/ bin / bash echo "\ $ 0" dirname "\ $ 0"
Copie Dirname produira le nom du répertoire - relatif de toute option qui lui est adoptée, et dans ce cas qui est \ 0 0
- Une variable spéciale qui est définie lorsqu'un script commence au nom du script au début. Tessons-le:
$ ./ test2.shot ./ test2.shot . $ cd test $… / test2.sh… / test2.sh…
Mieux, je suppose, et cela peut aider un peu (pour avoir une idée principalement), mais cela ne nous donne toujours pas avec un chemin d'accès pleinement qualifié. Pour cela, nous pouvons utiliser un emballage à double sous-coquille autour dirname
en combinaison avec un chemin qualifié complet réel obtenu à partir d'un PWD
exécution:
$ cat Make_it_work.sh #!/ bin / bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path"
Copie Voyons si cela fonctionne:
$ ./fais-le fonctionner.sh / home / roel / espace de travail
Jusqu'ici tout va bien, mais cela fonctionne lorsque vous l'exécutez à partir d'un sous-répertoire?
$ cd test && pwd / home / roel / workspace / test $… / make_it_work.sh / home / roel / workspace $ / home / roel / workspace / make_it_work.sh / home / roel / espace de travail
Oui!
Nous changeons d'abord en test
et vérifier que nous sommes dans le test
répertoire, si ce répertoire change (CD
) La commande a réussi (comme indiqué par &&
).
Dans les deux cas - si elle est appelée de manière relative (… /
), ou avec un nom de chemin entièrement qualifié (/ home / roel / workspace /
), le résultat est que nous voyons le répertoire à partir duquel le script a été démarré (/ home / roel / workspace /
) et non le répertoire de travail actuel réel, ou Pwd (/ Home / Roel / Workspace / Test
).
En résumé, vous pouvez utiliser le My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)"
script à une ligne pour obtenir le nom de répertoire correct et entièrement qualifié à partir de vos scripts. Après cela, l'utilisation d'un ajout relatif fonctionnera bien. Par exemple, vous pouvez utiliser $ My_path / include / mysubscript.shot
et même $ My_path /… / one_dir_up_file.SMS
etc.
Exemple 2: Grepping uniquement ce dont vous avez besoin
Avez-vous déjà utilisé grep
? Grep est un utilitaire de ligne de commande bash polyvalent qui vous permet de sélectionner facilement du texte à partir d'un fichier. La plupart du temps, il est utilisé comme suit:
$ Cat Test Line 1 Ma ligne Ligne 2 Vos lignes Ligne 3 Notre ligne $ grep 'ligne 2' Test Line 2 Vos lignes
Nous avons un fichier d'entrée avec 3 lignes et nous recherchons un test spécifique (ligne 2
) dans ce fichier. Mais que diriez-vous si vous ne voulez que les lignes qui ont le multiple doubler
(je.e. lignes
) mentionné en eux? Et, que diriez-vous si vous vouliez seulement avoir le mot avant qu'il y compris le lignes
peu, mais pas le réel ligne X
sortir?
Dans ce cas, nous ne pouvons que grep uniquement pour ce dont nous avons besoin -o
(«seulement») Option pour grep:
$ grep -o 'lignes' Test Lines $ grep -o '\ w \ + lignes' tester vos lignes
Bingo! Nous avons d'abord salué uniquement le mot «lignes», qui a été trouvé. Nous avons ensuite préfixé cela avec un espace et une expression régulière qui indique en pseudo-texte: trouvez une limite de mot (\ w
), au moins une fois et autant de fois que l'applicable (\+
) suivi d'un espace. Le résultat est que ton
(qui a deux limites de mots; un début et une fin) est inclus. ligne 2
n'est pas inclu. Bien qu'il ait des limites de mot, il n'y a pas de suffixe de lignes
à celui-là.
Si vous souhaitez en savoir plus sur les expressions régulières dans Bash, veuillez consulter les armes à l'exploit.
Conclusion
Dans cet article, nous avons exploré PWD
et a regardé comment utiliser PWD
de l'intérieur d'un script en combinaison avec dirname
Pour récupérer le chemin du répertoire entièrement qualifié à partir duquel le script a été démarré, d'une manière qui fonctionnera toujours. Nous avons également examiné le grepper uniquement ce dont nous avons besoin en utilisant le -o
option et, dans ce cas, l'expression régulière pour correspondre aux limites des mots.
Laissez-nous un commentaire avec vos meilleurs conseils et astuces de ligne de commande bash!
- Conseils de ligne de commande bash utiles et exemples de trucs - Partie 1
- Conseils de commande de commande de bash utile et exemples de trucs - Partie 2
- Conseils de commande de commande de bash utile et exemples de trucs - Partie 3
- Exemples de lignes de commande de commande de bash utile - Partie 4
- Conseils de commande de commande de bash utile et exemples de trucs - Partie 5
Tutoriels Linux connexes:
- Une introduction à l'automatisation Linux, des outils et des techniques
- Masterring Bash Script Loops
- Conseils de ligne de commande bash utiles et exemples de trucs - Partie 1
- Conseils de commande de commande de bash utile et exemples de trucs - Partie 3
- Conseils de commande de commande de bash utile et exemples de trucs - Partie 2
- Choses à installer sur Ubuntu 20.04
- Boucles imbriquées dans les scripts bash
- Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
- Conseils de commande de commande de bash utile et exemples de trucs - Partie 5
- Ubuntu 20.04 Guide
- « Conseils de commande de commande de bash utile et exemples de trucs - Partie 3
- Conseils de commande de commande de bash utile et exemples de trucs - Partie 5 »