Как записать сценарий, который генерирует текстовый файл и открывает его?

Я недавно начал использовать Linux, и я хочу создать сценарий, который сделает следующее:

  1. Генерируйте текстовый файл, где первая строка: План Работы {сегодняшняя дата}
  2. Сохраните его с именем work_plan_ {сегодняшняя дата}
  3. (Дополнительный - не важный как точки 1 и 2), Открывают его полноэкранная высота, половина экрана width.

Как я могу записать сценарий, который сделает это и что я могу звонить от какого-либо терминала, не имея необходимость к его полному пути? Таким образом, я хочу просто ввести, например, gen-work-plan и не/usr/home/document/gen-work-plan...

Кто-либо знает, как я могу сделать это?

1
задан 12 July 2016 в 13:23

3 ответа

Сделать точно, что Вы описываете, берет сценарий

enter image description here

enter image description here

Не мог сопротивляться регистрации ответа...

Для создания файла с текущей датой как заголовок и как, заголовок внутри проводил бы одну или две строки. Однако, если Вы хотите:

  • предотвратите файл, который будет перезаписан, при выполнении команды случайно
  • откройте файл с gedit
  • ожидайте окна, чтобы появиться и впоследствии переместить и изменить размер его

... это будет проводить несколько строк больше, чем это.

Сценарий ниже желания:

  • создайте новый файл, в произвольном каталоге, названном в честь текущей даты, только если она еще не существует. Вы не хотели бы перезаписывать его.
  • добавьте текущую дату к файлу, как:

    Workplan 12-12-12
    
  • откройте файл с gedit, ожидайте окна, чтобы появиться (!), переместить окно в верхний левый угол, изменить размер его к 50% (шириной), 100% (высотой)

Сценарий

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

Как использовать

  1. Для сценария нужны оба xdotool и wmctrl:

    sudo apt-get install xdotool wmctrl
    
  2. Скопируйте сценарий в пустой файл, сохраните его как workplan (никакое расширение!) в ~/bin. Создать ~/bin если это еще не существует. Сделайте исполняемый файл сценария.
  3. В заголовке сценария, набор (абсолютный!) соединяют каналом туда, где Вы были бы lioke для хранения планов работы:

    # --- set the abs. path to where you'd like to store the "Workplans"
    filedir = "/home/jacob/Bureaublad"
    # ---
    
  4. Выйдите из системы ands въезжают задним ходом, выполняют команду просто:

    workplan
    

Объяснение

  • Для создания файла в Python мы можем просто использовать:

    open("file", "wt").write("sometext")
    
  • для перемещения и изменения размеров однако, мы должны ожидать окна для появления путем проверки, появляется ли окно в выводе команды:

    wmctrl -l
    

    в сценарии:

        while t < 20:
            t += 1; time.sleep(1)
            wlist = subprocess.check_output(["wmctrl", "-l"]).decode("utf-8")
            if out in wlist:
    
  • Затем, после того как окно появилось, мы отделяем идентификатор окна (сначала строка в строках в выводе wmctrl -l), переместите окно в верхнее левое, и измените размер его:

                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
ответ дан 3 December 2019 в 06:25

Что-то как:

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

не забывают делать это исполняемым файлом с chmod +x gen-work-plan.

Для выполнения его без пути любой добавляет каталог, содержащий документ на получение к Вашему $PATH в ~/.bashrc (рекомендуемый для безопасности):

export PATH=$PATH:_Location_of_the_file_

Или символьная ссылка это в /usr/bin:

ln -s _location_/gen-work-plan /usr/bin/gen-work-plan
3
ответ дан 3 December 2019 в 06:25

Вот простой сценарий удара, который я использовал бы

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

Для запущения этого скрипта без его пути, его местоположение должно быть включено в $PATH переменная среды. Можно ли сделать это с этой строкой

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

, можно ли хотеть добавить эту строку к Вашему ~/.bashrc файл

ИЛИ

, можно ли создать символьную ссылку с этой командой

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

, после этого удостоверяются, что файл является исполняемым файлом, при необходимости, выполните следующие кредиты команды

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

к c0rp для этого ответа https://источник askubuntu.com/users/164083/c0rp

, посмотрите ссылку ниже

, Как запустить скрипты, не вводя полный путь?

1
ответ дан 3 December 2019 в 06:25

Другие вопросы по тегам:

Похожие вопросы: