如何编写生成文本文件并打开它的脚本?

如何编写生成文本文件并打开它的脚本?

我最近开始使用 Linux,我想创建一个执行以下操作的脚本:

  1. 生成一个文本文件,其中第一行是:工作计划{今天的日期}
  2. 将其保存为 work_plan_{todays date}
  3. (可选 - 不像第 1 点和第 2 点那样必不可少)以全屏高度、半屏宽度打开。

我该如何编写一个脚本来执行此操作,并且我可以从任何终端调用它而不必输入其完整路径?也就是说,我只想输入,例如,gen-work-plan,而不是 /usr/home/document/gen-work-plan...

有人知道我该怎么做吗?

答案1

要完全按照你描述的步骤操作,需要脚本

在此处输入图片描述

在此处输入图片描述

无法抗拒发表答案...

要创建一个文件,将当前日期作为标题和文件头,需要一两行。但是,如果你想:

  • 防止意外运行命令时文件被覆盖
  • 使用 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. 该脚本需要xdotoolwmctrl

    sudo apt-get install xdotool wmctrl
    
  2. 将脚本复制到一个空文件中,将其另存为workplan(无扩展名!)~/bin~/bin如果它尚不存在,请创建。使脚本可执行
  3. 在脚本的头部,设置您想要存储工作计划的(绝对!)路径:

    # --- set the abs. path to where you'd like to store the "Workplans"
    filedir = "/home/jacob/Bureaublad"
    # ---
    
  4. 注销并重新登录,只需运行以下命令:

    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:
    
  • 然后,一旦窗口出现,我们就分离窗口 id(输出行中的第一个字符串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
    

答案2

就像是:

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

下面是我将使用的简单 bash 脚本

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

来源见下方链接

如何在不输入完整路径的情况下运行脚本?

相关内容