Como escrever um script que gera um arquivo de texto e o abre?

1

Comecei recentemente a usar o Linux e quero criar um script que faça o seguinte:

  1. Gere um arquivo de texto onde a primeira linha é: Plano de trabalho {data de hoje}
  2. Salve-o com o nome work_plan_ {data de hoje}
  3. (Opcional - não essencial como os pontos 1 e 2) Abra a altura total da tela, metade da largura da tela.

Como posso escrever um script que faça isso e que eu possa ligar de qualquer terminal sem ter que percorrer todo o caminho? Ou seja, eu quero apenas digitar, por exemplo, gen-work-plan e não / usr / home / document / gen-work-plan ...

Alguém sabe como posso fazer isso?

    
por csss 12.07.2016 / 09:28

3 respostas

3

Para fazer exatamente o que você descreve, é necessário um script

Não foi possível resistir a postar uma resposta ...

Para criar um arquivo, com a data atual como um título e como um cabeçalho dentro, seria necessário uma ou duas linhas. No entanto, se você quiser:

  • impede que o arquivo seja sobrescrito se você executar o comando acidentalmente
  • abra o arquivo com o gedit
  • espere a janela aparecer e, em seguida, mova-a e redimensione-a

... vai demorar mais algumas linhas do que isso.

O script abaixo irá:

  • crie um novo arquivo, em um diretório arbitrário, nomeado após a data atual, somente , se ainda não existir. Você não gostaria de sobrescrevê-lo.
  • adicione a data atual ao arquivo, como:

    Workplan 12-12-12
    
  • abra o arquivo com gedit , espere a janela aparecer (!), mova a janela para o canto superior esquerdo, redimensione para 50% (largura), 100% (altura)

O script

#!/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

Como usar

  1. O script precisa dos dois xdotool e wmctrl :

    sudo apt-get install xdotool wmctrl
    
  2. Copie o script em um arquivo vazio, salve-o como workplan (sem extensão!) em ~/bin . Crie ~/bin se ainda não existir. Torne o script executável .
  3. Na cabeça do script, defina o caminho (absoluto!) para onde você gostaria de armazenar seus planos de trabalho:

    # --- set the abs. path to where you'd like to store the "Workplans"
    filedir = "/home/jacob/Bureaublad"
    # ---
    
  4. Efetue logout e volte, execute o comando simplesmente por:

    workplan
    

Explicação

  • Para criar um arquivo em python, podemos simplesmente usar:

    open("file", "wt").write("sometext")
    
  • para o mover e redimensionar , no entanto, precisamos esperar que a janela apareça verificando se a janela aparece na saída do comando:

    wmctrl -l
    

    no script:

        while t < 20:
            t += 1; time.sleep(1)
            wlist = subprocess.check_output(["wmctrl", "-l"]).decode("utf-8")
            if out in wlist:
    
  • Depois que a janela entrou em vigor, dividimos o id da janela (primeira string nas linhas na saída de wmctrl -l ), movemos a janela para o canto superior esquerdo e redimensionamos:

                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
    
por Jacob Vlijm 12.07.2016 / 11:15
3

Algo como:

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

Não se esqueça de torná-lo executável com chmod +x gen-work-plan .

Para executá-lo sem caminho, adicione o diretório que contém o script ao seu $PATH in ~/.bashrc (recomendado para segurança):

export PATH=$PATH:_Location_of_the_file_

Ou crie links simbólicos em /usr/bin :

ln -s _location_/gen-work-plan /usr/bin/gen-work-plan
    
por Pieter De Praetere 12.07.2016 / 09:58
1

Aqui está um script bash simples que eu usaria

#!/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

Para executar este script sem seu caminho, sua localização deve ser incluída na variável de ambiente $PATH . Você pode fazer isso com esta linha

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

Você pode adicionar essa linha ao seu arquivo ~/.bashrc

OR

Você pode criar um link simbólico com este comando

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

depois disso, verifique se o arquivo é executável, se necessário, execute o seguinte comando

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

créditos para c0rp para esta resposta link

Fonte, veja o link abaixo

Como rodar scripts sem digitar o caminho completo?

    
por jiipeezz 12.07.2016 / 10:16