This month I’d like to talk about something basic that a lot of people forget about. I was standing behind someone, shoulder surfing, as he showed me something. He was one of those super fast typers (100+ wpm) that could retype any mistake very quickly, but some of it was not mistakes and he would hit CTRL+c and retype. All I could think about was that it could have been done in one go or continued without issue. You see I’m lazy, I don’t like a lot of typing, (also I only type at 45wpm) so any “savings” earns bonus points in my book.
Ce mois-ci, j'aimerais parler d'un élément de base que beaucoup de gens oublient. Je me tenais derrière quelqu'un, en train de surfer sur les épaules, alors qu'il me montrait quelque chose. Il était l'un de ces dactylographes super rapides (plus de 100 mots par minute) qui pouvaient retaper n'importe quelle erreur très rapidement, mais certaines n'étaient pas des erreurs et il appuyait sur CTRL+c et retapait. Tout ce à quoi je pouvais penser, c'est que cela aurait pu être fait en une seule fois ou continuer sans problème. Vous voyez, je suis paresseux, je n'aime pas beaucoup taper au clavier (je tape aussi seulement à 45 mots par minute), donc toute « économie » gagne des points bonus dans mon livre.
You all know about chaining update and upgrade, I mean you probably made an alias or tiny program to do it for you. You know, “sudo apt update && sudo apt upgrade -y”. Thing is, that I want to highlight that “&&” and expand a bit. The “&&” will run the second command, regardless if the first command had an error. To illustrate, disconnect your network, or turn off your WiFi and run that command. Let’s move on. The examples I will use will not be “real world” examples, but they will be examples that you can easily follow. Let's start simple, with the background operator. Open your terminal and type: ping -c 3 www.google.co.uk & and hit <enter>. What you will get back, is a process ID. (ping prints to the screen, so it won’t go quietly, but that is why I chose it) So if we were to add more than one command, they would happen at the same time, meaning instead of my typing out, say pwd, id and who, I could chain them, like so: pwd & id & who -and I should get three PID’s back and a “done” message when completed. (that ‘done’ part is important) However, sometimes we need the first command to complete before the second one runs, and we are all familiar with the first example above, but I’ll use another to illustrate my point. If I were to make a folder and then cd into that folder and make a file, you would agree, that I would get an error, if the folder was not created yet and I tried to cd into that folder, correct?
Vous savez tous comment enchaîner les mises à jour et les mises à niveau, je veux dire que vous avez probablement créé un alias ou un petit programme pour le faire à votre place. Vous connaissez « sudo apt update && sudo apt upgrade -y ». Le fait est que je veux mettre en évidence ce « && » et développer un peu. Le « && » exécutera la deuxième commande, que la première commande ait ou non une erreur. Pour illustrer, déconnectez votre réseau ou éteignez votre WiFi et exécutez cette commande. Passons à autre chose. Les exemples que je vais utiliser ne seront pas des exemples du « monde réel », mais ce seront des exemples que vous pourrez facilement suivre. Commençons simplement, avec l'opérateur d'arrière-plan. Ouvrez votre terminal et tapez :
ping -c 3 www.google.co.uk &
et appuyez sur <enter>. Ce que vous obtiendrez en retour, c'est un identifiant de processus. (ping s'imprime à l'écran, donc il ne se déroulera pas silencieusement, mais c'est pourquoi je l'ai choisi) Donc si nous devions ajouter plus d'une commande, elles se produiraient en même temps, ce qui signifie qu'au lieu de taper, disons, pwd, id et who, je pourrais les enchaîner, comme ceci : pwd & id & who - et je devrais obtenir trois PID en retour et un message « terminé » une fois terminé. (cette partie « done » est importante) Cependant, nous avons parfois besoin que la première commande soit terminée avant que la seconde ne s'exécute, et nous connaissons tous le premier exemple ci-dessus, mais je vais en utiliser un autre pour illustrer mon propos. Si je devais créer un dossier, puis accéder à ce dossier par cd et créer un fichier, vous conviendrez que j'obtiendrais une erreur si le dossier n'était pas encore créé et que j'essayais d'accéder à ce dossier par cd, n'est-ce pas ?
Good, you are all smart cookies, so I’m sure we are all on the same page. If I were to type: mkdir fcm; cd fcm; touch fcm I’d end up in a folder with a file named fcm. It would be as if I typed those commands in, in order, one-by-one. It would do the first command, once completed, it would do the second command and so forth. Now I want you to make a mistake. Type: mkdir fcm; cd fcn; touch fcm and see what happens. Do you understand the difference between using “&&” and “;” then? (If not, replace the “;” with “&&” and run it again.) So we know about the “and” operator “&&” , now for the “or” operator “||”, for instance, we could look for a file, if it exists, do nothing, if it does not, create it. Example: ls fcm23 || touch fcm23 or the opposite, if it exists, remove it, ls fcm23 || rm fcm23 -if you are a newbie, please do this in your terminal to remember it. You know, the muscle memory thing…
Bien, vous êtes tous des malins, donc je suis sûr que nous sommes tous sur la même longueur d'onde. Si je devais taper :
mkdir fcm ; cd fcm ; touch fcm
Je me retrouverais dans un dossier avec un fichier nommé fcm. Ce serait comme si je tapais ces commandes, dans l'ordre, une par une. Cela exécuterait la première commande, une fois terminée, cela exécuterait la deuxième commande et ainsi de suite.
Maintenant, je veux que vous fassiez une erreur. Tapez :
mkdir fcm ; cd fcn ; touch fcm
et voyez ce qui se passe. Comprenez-vous la différence entre l'utilisation de « && » et « ; » alors ? (Sinon, remplacez le « ; » par « && » et exécutez-le à nouveau.)
Nous connaissons donc l'opérateur « and » « && » ; maintenant, pour l'opérateur « or » « || », par exemple, nous pourrions rechercher un fichier, s'il existe, ne rien faire, s'il n'existe pas, le créer. Exemple : ls fcm23 || touch fcm23 ou l'inverse, s'il existe, supprimez-le, ls fcm23 || rm fcm23 -si vous êtes un débutant, veuillez le faire dans votre terminal pour vous en souvenir. Vous savez, le truc de la mémoire musculaire…
You can chain more of these commands together, like we saw in the Python tutorials in the magazine, lets say: ls fcm && echo “present” || “missing” & -and we bring it all together at once. Though it may look cryptic, you know what it does and if you followed along in the terminal and I now encourage you to try your own command chaining with commands that *you know. (everything I’m thinking of requires something installed that you may not have) If you are having trouble visualising any of it, use parenthesis. For example; (ls fcm23 && echo “searching…”) || (echo “not found”) This helps to break up long commands to help you get the logic right in your own mind, before committing to a shell script as these sorts of things can get very long and span multiple lines on the terminal. Which reminds me… Just touching on another thing quickly – if you have bear paws like me and you have typed “\” with “enter” as the two keys are above each other, you will be frustrated, but also aware of the power of the “\”. (or not?)
Vous pouvez enchaîner plusieurs de ces commandes ensemble, comme nous l'avons vu dans les tutoriels Python du magazine, disons : ls fcm && echo « present » || « missing » & - et nous rassemblons le tout en même temps. Bien que cela puisse paraître cryptique, vous savez ce que cela fait et si vous avez suivi dans le terminal, je vous encourage maintenant à essayer votre propre enchaînement de commandes avec des commandes que *vous connaissez. (tout ce à quoi je pense nécessite quelque chose d'installé que vous n'avez peut-être pas). Si vous avez du mal à visualiser tout cela, utilisez des parenthèses. Par exemple ; (ls fcm23 && echo “recherche…”) || (echo “pas trouvé”) Cela permet de décomposer les longues commandes pour vous aider à avoir la bonne logique dans votre esprit, avant de vous engager dans un script shell, car ce genre de choses peut devenir très long et s'étendre sur plusieurs lignes sur le terminal. Ce qui me rappelle…
Je touche rapidement à autre chose : si vous avez des pattes d'ours comme moi et que vous avez tapé “\” avec “enter” car les deux touches sont l'une au-dessus de l'autre, vous serez frustré, mais aussi conscient de la puissance du “\”. (ou pas ?)
Please leave your terminal in the default 80×25 and type: echo “ This is a very long line of text that I'd rather \have across multiple lines of console to ease readability.” and hit <enter> This means that if you typed say, touch fcm\ -and hit <enter> and end up with a “>” on a new line, as a newbie, you should not panic and press CTRL+c like I saw this chappie do. Sticking with the above example, you can simply type: .txt -on the next line and hit enter. (I’ll add a screen-shot, as a picture may explain it a bit better.) Hitting backslash before Enter, simply says “continue on a new line”, meaning you should go ahead like nothing happened. So, when you are using all of the above in your daily terminal sessions, you know that you have arrived. If you have any issue with what was said: misc@fullcirlemagazine.org
Veuillez laisser votre terminal dans la valeur par défaut 80×25 et tapez :
echo “ Ceci est une très longue ligne de texte que je préférerais avoir sur plusieurs lignes de console pour faciliter la lecture. ”
et appuyez sur <Entrée>
Cela signifie que si vous tapez, par exemple, touch fcm\ -et appuyez sur <Entrée> et que vous vous retrouvez avec un « > » sur une nouvelle ligne, en tant que débutant, vous ne devez pas paniquer et appuyer sur CTRL+c comme j'ai vu ce gars le faire. En restant avec l'exemple ci-dessus, vous pouvez simplement taper : .txt - sur la ligne suivante et appuyer sur Entrée. (Je vais ajouter une capture d'écran, car une image pourrait l'expliquer un peu mieux.)
Appuyer sur la barre oblique inverse avant Entrée signifie simplement « continuer sur une nouvelle ligne », ce qui signifie que vous devez continuer comme si de rien n'était.
Ainsi, lorsque vous utilisez tout ce qui précède dans vos sessions quotidiennes sur le terminal, vous savez que vous êtes arrivé.
Si vous avez un problème avec ce qui a été dit : misc@fullcirlemagazine.org