我最近开始使用 Linux,我想创建一个执行以下操作的脚本:
- 生成一个文本文件,其中第一行是:工作计划{今天的日期}
- 将其保存为 work_plan_{todays date}
- (可选 - 不像第 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
如何使用
该脚本需要
xdotool
和wmctrl
:sudo apt-get install xdotool wmctrl
- 将脚本复制到一个空文件中,将其另存为
workplan
(无扩展名!)~/bin
。~/bin
如果它尚不存在,请创建。使脚本可执行。 在脚本的头部,设置您想要存储工作计划的(绝对!)路径:
# --- set the abs. path to where you'd like to store the "Workplans" filedir = "/home/jacob/Bureaublad" # ---
注销并重新登录,只需运行以下命令:
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
来源见下方链接