web-dev-qa-db-ja.com

テキストファイルを生成して開くスクリプトを記述する方法

最近Linuxの使用を開始しました。次のことを行うスクリプトを作成したいと思います。

  1. 最初の行のテキストファイルを生成します。作業計画{今日の日付}
  2. Work_plan_ {todays date}という名前で保存します
  3. (オプション-ポイント1および2のように必須ではありません)全画面高、半画面幅で開きます。

これを行うスクリプトを作成するにはどうすればよいですか?また、フルパスを使用せずに任意の端末から呼び出すことができるスクリプトを作成するにはどうすればよいですか?つまり、たとえば/ usr/home/document/gen-work-planではなくgen-work-planと入力するだけです...

誰も私がこれを行う方法を知っていますか?

1
csss

説明したとおりに行うには、スクリプトを使用します

enter image description here

enter image description here

回答の投稿に抵抗できませんでした...

ファイルを作成するには、現在の日付をタイトルとして、ヘッダーを内部に使用して、1行または2行を取ります。ただし、必要な場合:

  • 誤ってコマンドを実行した場合にファイルが上書きされないようにします
  • geditでファイルを開きます
  • ウィンドウが表示されるのを待ってから、移動してサイズを変更します

...それよりも数行多くかかります。

以下のスクリプトは:

  • 現在の日付にちなんで命名された任意のディレクトリに新しいファイルを作成します。onlyまだ存在しません。上書きしたくないでしょう。
  • 次のように、ファイルに現在の日付を追加します。

    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. スクリプトを空のファイルにコピーし、~/binworkplan(拡張子なし!)として保存します。 ~/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")
    
  • movingおよびresizingの場合、ウィンドウが出力に表示されるかどうかを確認して、ウィンドウが表示されるのを待つ必要があります。コマンド:

    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
    
3
Jacob Vlijm

何かのようなもの:

#!/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ファイルに追加できます

[〜#〜] or [〜#〜]

このコマンドでシンボリックリンクを作成できます

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
jiipeezz