web-dev-qa-db-fra.com

Comment écrire un script qui génère un fichier texte et l'ouvre?

J'ai récemment commencé à utiliser Linux et je souhaite créer un script qui effectuera les opérations suivantes:

  1. Générez un fichier texte dont la première ligne est la suivante: Plan de travail {date du jour}
  2. Enregistrez-le sous le nom work_plan_ {date du jour}
  3. (Facultatif - non essentiel comme les points 1 et 2) Ouvrez-le en hauteur plein écran, demi-largeur d'écran.

Comment puis-je écrire un script qui fera cela et que je pourrai appeler depuis n’importe quel terminal sans avoir à sortir de son chemin complet? C’est-à-dire que je veux simplement taper, par exemple, gen-work-plan et non pas/usr/home/document/gen-work-plan ...

Est-ce que quelqu'un sait comment je peux faire ça?

1
csss

Pour faire exactement ce que vous décrivez, il faut un script

enter image description here

enter image description here

Impossible de résister à poster une réponse ...

Pour créer un fichier, avec la date actuelle comme titre et comme en-tête, il faudrait une ou deux lignes. Cependant, si vous voulez:

  • empêche le fichier d'être écrasé si vous exécutez la commande accidentellement
  • ouvrir le fichier avec gedit
  • attendez que la fenêtre apparaisse, puis déplacez-la et redimensionnez-la

... il faudra quelques lignes de plus que cela.

Le script ci-dessous va:

  • créer un nouveau fichier, dans un répertoire arbitraire, nommé d'après la date du jour, seulement ​​ s'il n'existe pas encore. Vous ne voudriez pas l'écraser.
  • ajoutez la date actuelle au fichier, comme:

    Workplan 12-12-12
    
  • ouvrez le fichier avec gedit, attendez que la fenêtre apparaisse (!), déplacez la fenêtre en haut à gauche, redimensionnez-la à 50% (largeur), 100% (hauteur)

Le scénario

#!/usr/bin/env python3
import time
import subprocess
import os
import time
# --- add the absolute path to the directory where you'd like to store the Workplans
filedir = "/home/jacob"
# ---
curr = "Workplan "+time.strftime("%d-%m-%Y"); out = curr+".txt"
file = os.path.join(filedir, out)
# check for the file to exist (you wouldn't overwrite it)
if not os.path.exists(file):
    # write "Workplan" + date to the file
    open(file, "wt").write(curr)
    # open the file with gedit
    subprocess.Popen(["gedit", file])
    # wait for the window to appear, move/resize it
    t = 0
    while t < 20:
        t += 1; time.sleep(1)
        wlist = subprocess.check_output(["wmctrl", "-l"]).decode("utf-8")
        if out in wlist:
            w = [l.split()[0] for l in wlist.splitlines() if out in l][0]
            for cmd in [["xdotool", "windowmove", w, "0", "0"],
                        ["xdotool", "windowsize", w, "47%", "100%"]]:
                subprocess.call(cmd)
            break

Comment utiliser

  1. Le script nécessite à la fois xdotool et wmctrl:

    Sudo apt-get install xdotool wmctrl
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom workplan (sans extension!) Dans ~/bin. Créez ~/bin s'il n'existe pas encore. Rendre le script exécutable.
  3. Dans la tête du script, définissez le chemin (absolu!) Sur lequel vous souhaitez stocker vos plans de travail:

    # --- set the abs. path to where you'd like to store the "Workplans"
    filedir = "/home/jacob/Bureaublad"
    # ---
    
  4. Déconnectez-vous et reconnectez-vous, exécutez la commande simplement en:

    workplan
    

Explication

  • Pour créer un fichier en python, nous pouvons simplement utiliser:

    open("file", "wt").write("sometext")
    
  • pour le moving et redimensionner, nous devons toutefois attendre que la fenêtre apparaisse en vérifiant si la fenêtre apparaît dans le résultat de la commande:

    wmctrl -l
    

    dans le script:

        while t < 20:
            t += 1; time.sleep(1)
            wlist = subprocess.check_output(["wmctrl", "-l"]).decode("utf-8")
            if out in wlist:
    
  • Puis, une fois que la fenêtre est apparue, nous avons scindé l'identifiant de la fenêtre (la première chaîne dans les lignes de la sortie de wmctrl -l), avons déplacé la fenêtre en haut à gauche et redimensionnée:

                w = [l.split()[0] for l in wlist.splitlines() if curr in l][0]
                for cmd in [["xdotool", "windowmove", w, "0", "0"],
                            ["xdotool", "windowsize", w, "47%", "100%"]]:
                    subprocess.call(cmd)
                break
    
3
Jacob Vlijm

Quelque chose comme:

#!/bin/bash
today=$(date "+%Y-%m-%d")
echo "Work Plan $today" > work_plan_"$today"
gedit work_plan_"$today"

N'oubliez pas de le rendre exécutable avec chmod +x gen-work-plan.

Pour l'exécuter sans chemin, ajoutez le répertoire contenant le script à votre $PATH dans ~/.bashrc (recommandé pour la sécurité):

export PATH=$PATH:_Location_of_the_file_

Ou faites un lien symbolique dans /usr/bin:

ln -s _location_/gen-work-plan /usr/bin/gen-work-plan
3
Pieter De Praetere

Voici un script bash simple que je voudrais utiliser

#!/bin/bash
dat=$(date "+%Y-%m-%d")
touch work_plan_$dat
echo "Work Plan $dat" > work_plan_$dat
if [ -f work_plan_$dat ]; then
    echo "Successfully created file work_plan_$dat"
fi
gedit work_plan_$dat

Pour exécuter ce script sans son chemin, son emplacement doit être inclus dans la variable d’environnement $PATH. Vous pouvez le faire avec cette ligne

PATH=/an/example/path:"$PATH"

Vous voudrez peut-être ajouter cette ligne à votre fichier ~/.bashrc

OU

Vous pouvez créer un lien symbolique avec cette commande

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

après cela, assurez-vous que le fichier est exécutable. Si nécessaire, exécutez la commande suivante.

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

crédits à c0rp pour cette réponse https://askubuntu.com/users/164083/c0rp

Source, voir le lien ci-dessous

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

1
jiipeezz