10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LinuxのコマンドをPythonで自作する

Last updated at Posted at 2019-12-05

※Macでもできるかもしれないです。(未検証)
※言語はRubyとかでもできるかもしれません。(未検証)

この記事について

この頃さまざまな用途に使われているPythonですが、ファイル操作などちょっとした作業を自動化したい時にも便利ですよね~!

退屈なことはPythonにやらせよう という本まで出ております。
↑アフィリエイトではないです(念のため)

この記事ではそんなPythonコードをあたかもコマンドのように実行できる方法を紹介します!

手順

今回はファイル一覧を表示するコマンド、filelistを作成しながら手順を追っていきます。(lsみたいなやつ)

手順を一言で紹介するなら、
Shebangでpythonのインタープリタ(#!/usr/bin/env python)を指定したファイル「filelist」に実行権限を与え、保存されているディレクトリにPATHを通すと、そのファイルをfilelistで実行できるようになる。
といった感じです。

以下に実装の流れを示します。

0.前提

すでにPythonがインストールされていて、pythonコマンドで実行できるようになっていることが前提です。
インストールは「python インストール linux」などで検索すれば方法がいろいろ出てくるので参考にしながら行ってください。

1.スクリプトの作成

まずは、実行するためのスクリプトを作成します。
適当にフォルダを作成してその中に保存しましょう。

1.ホームディレクトリに「pycommands」ディレクトリを作成

mkdir ~/pycommands

2.「pycommands」ディレクトリに移動

cd ~/pycommands

3.ファイル「filelist」を作成し、編集画面へ

vi filelist

4.ファイル「filelist」を編集

#!/usr/bin/env python

import os
from pathlib import PATH

# ユーザーが現在いるディレクトリ(os.getcwd())の情報を取得
current_dir = PATH(os.getcwd())

# glob("*")でユーザーが現在いるディレクトリのファイル一覧を取得
for file in current_dir.glob("*"):
    print(file)

ここで重要なのが、1行目の#!/usr/bin/env pythonです。
これはShebang(シェバン)とよばれ、ファイルの中身を何を使って解釈するかを指定しているものです。
ここでPythonを指定しているため、.pyなどと書かれていなくてもPythonコードが実行されるんですね。
(この部分でRubyなどを指定すると、Rubyコードも実行できると思います。)

2.実行権限の付与

今作ったファイル「filelist」は、まだ実行できるファイルではありません。
これを実行するためには、ファイルに実行権限を与える必要があります。

ファイルに実行権限を与えるには、

chmod u+x ~/pycommands/filelist

を実行します。
(「filelist」を~/pycommands/以下に作成した前提でやっています。違う場所に作成した場合は、適宜コマンドを変更してください。)

chmod コマンドの意味はこちら:Linuxの権限確認と変更(chmod)(超初心者向け) - Qiita

この状態ですでに実行自体はできます。
任意の場所で

~/pycommands/filelist

とコマンドを入力すると、ファイルの一覧が出力されるはずです。

次のステップで、これをfilelistと入力するだけで実行できるようにします。

3.PATHを通す

次に、どこからでもこのコマンドを実行できるようにします。

ある場所に置いてあるコマンドをどこからでも実行できるようにするためには、環境変数のPATHを設定する必要があります。

※環境変数、PATHについてはこちら:Pathを通すとは、環境変数とは - Qiita

PATHは、ざっくり言えば「コマンド(らしきもの)を入力した時、その名前の実行ファイルを探しに行く場所のリスト」のことです。

ls コマンドを入力すると、PATHの中から「ls」という名前の実行ファイルを探しに行き、見つけたファイルを実行しているのです。
(PATHで定義されている場所リストに、前の方から一つずつアクセスしながら探している。)

とりあえず今回だけ実行するには、

export PATH='$PATH:$HOME/pycommands/'

を実行すればOKです。

いつも使えるようにするためには、

echo export PATH='$PATH:$HOME/pycommands/' >> ~/.bashrc
source ~/.bashrc

でOKです。

4.実行!

任意の場所で、

filelist

を実行すれば、ファイルの一覧が表示されます。

実行されない場合

同名のコマンドがすでにある

すでに同名のコマンドが存在した場合、この流れで作成したコマンドと同名のものがすでに存在するため、PATHで先にそっちが探されてしまい、作ったコマンドが実行されません。(PATHの最後にディレクトリを追加したため)

名前を変えるか、PATHの順番を変えて先に実行されるようにしましょう。(おすすめしない)

まとめ

コマンドを作って作業を便利にしましょう^^

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?