回答編集履歴

2 日本語が変なところを訂正

KSwordOfHaste

KSwordOfHaste score 18031

2018/01/20 00:40  投稿

質問意図と少し外れると思いますが・・・
せっかくunixライクなMacintoshなのですからPython hogehoge.pyと打ち込まなくてもhogehoge.pyが普通のコマンドのように使えるようにしてはいかがでしょうか?
例えば
```python
#!/usr/bin/python
import sys
for arg in sys.argv:
   print(arg)
```
このようなファイルをecho.pyとして作成しchmod +xで実行権限を付けてやると
```bash
$ chmod +x echo.py
$ ./echo.py hello world
./echo.py
hello
world
```
(訂正:最初の回答では./echo.pyが印字されることが抜けてました。失礼しました)
というぐあいにあたかもecho.pyが組み込みコマンドかのようにして使えます。こうできるカラクリは先頭行に書いた`#!/usr/bin/python`という行です。unix系osではCコンパイラーなどで作成したネイティブな機械語の実行可能ファイルだけでなく実行権限が付与された普通のテキストファイルであっても先頭行が`#!スクリプトインタープリタのパス`となっていれば
`起動しようとしているスクリプトファイル名 引数...`
のように実行しようとするとあたかも
`スクリプトインタープリタ 起動されたファイル 引数...`
と起動されたかのように解釈してくれます。これはpythonに限らず一般的なスクリプトインタープリタ(スクリプトファイルを引数にして実行できるようなあらゆるもの。Pythonもそうです。)で使える一般的な方法です。unix系OSの便利な点はこれがbashなどのシェル上から起動された場合のみならず、システムコールで実行可能ファイルを起動するexecシステムコールの場合でも同様にして動かせることです。Cコンパイラーだけがunixでのコマンドを作成する唯一の手段ではないわけですね。
と起動されたかのように解釈してくれます。これはpythonに限らず一般的なスクリプトインタープリタ(スクリプトファイルを引数にして実行できるようなあらゆるもの。Pythonもそうです。)で使える一般的な方法です。unix系OSの便利な点はこれがbashなどのシェル上から起動された場合のみならず、実行可能ファイルを起動するexecシステムコールレベルでこの機構がサポートされていることで、そのため`find ... -exec コマンド...`などのようにシェル以外から起動されるような場合でも同様に動いてくれます。要するにCコンパイラーのようなものだけがunixでのコマンドを作成する唯一の手段ではなくとても手軽にコマンドが作れるわけですね。
というわけで普段から使うコマンドをpythonなどで作るような場合、例えば`~/bin`に置くことにしておき、.bash_profileに以下のように書いておくことでいつでもどこでもbash上からコマンド名だけで呼び出せます。
```bash
...
export PATH="$PATH:~/bin"
```
```bash
$ echo.py hello world
hello
world
```
こうしておくことで、lsやcdを自分でpythonスクリプトに組み込まずとも充分使い勝手のよい自分だけのコマンドecho.pyが出来上がります。hogehoge.pyも同じようにしておけば今のままで充分便利に使えるのではないでしょうか?
---
ちなみにpythonスクリプトは分かり易さのため大抵xxx.pyのように拡張子を.pyにすると思いますが、実際は拡張子が.pyでなくても`python スクリプトファイル名`とすれば動いてくれると思います。つまり上記の方法で動かす際にhogehoge.pyという名前でなくhogehogeというスクリプトファイル名でもよいと思います。コマンド名だけで起動できるのですが末尾の".py"を打ち込むのが面倒ならhogehogeという名前にしてもよいですし、「pythonスクリプトで作成したコマンド」ということが分かった方がよいという理由で拡張子を.pyのままにしておくのもよいと思います。
1 実行結果の間違いを訂正

KSwordOfHaste

KSwordOfHaste score 18031

2018/01/20 00:26  投稿

質問意図と少し外れると思いますが・・・
せっかくunixライクなMacintoshなのですからPython hogehoge.pyと打ち込まなくてもhogehoge.pyが普通のコマンドのように使えるようにしてはいかがでしょうか?
例えば
```python
#!/usr/bin/python
import sys
for arg in sys.argv:
   print(arg)
```
このようなファイルをecho.pyとして作成しchmod +xで実行権限を付けてやると
```bash
$ chmod +x echo.py
$ ./echo.py hello world
./echo.py  
hello
world
```
(訂正:最初の回答では./echo.pyが印字されることが抜けてました。失礼しました)  
というぐあいにあたかもecho.pyが組み込みコマンドかのようにして使えます。こうできるカラクリは先頭行に書いた`#!/usr/bin/python`という行です。unix系osではCコンパイラーなどで作成したネイティブな機械語の実行可能ファイルだけでなく実行権限が付与された普通のテキストファイルであっても先頭行が`#!スクリプトインタープリタのパス`となっていれば
`起動しようとしているスクリプトファイル名 引数...`
のように実行しようとするとあたかも
`スクリプトインタープリタ 起動されたファイル 引数...`
と起動されたかのように解釈してくれます。これはpythonに限らず一般的なスクリプトインタープリタ(スクリプトファイルを引数にして実行できるようなあらゆるもの。Pythonもそうです。)で使える一般的な方法です。unix系OSの便利な点はこれがbashなどのシェル上から起動された場合のみならず、システムコールで実行可能ファイルを起動するexecシステムコールの場合でも同様にして動かせることです。Cコンパイラーだけがunixでのコマンドを作成する唯一の手段ではないわけですね。
というわけで普段から使うコマンドをpythonなどで作るような場合、例えば`~/bin`に置くことにしておき、.bash_profileに以下のように書いておくことでいつでもどこでもbash上からコマンド名だけで呼び出せます。
```bash
...
export PATH="$PATH:~/bin"
```
```bash
$ echo.py hello world
hello
world
```
こうしておくことで、lsやcdを自分でpythonスクリプトに組み込まずとも充分使い勝手のよい自分だけのコマンドecho.pyが出来上がります。hogehoge.pyも同じようにしておけば今のままで充分便利に使えるのではないでしょうか?
---
ちなみにpythonスクリプトは分かり易さのため大抵xxx.pyのように拡張子を.pyにすると思いますが、実際は拡張子が.pyでなくても`python スクリプトファイル名`とすれば動いてくれると思います。つまり上記の方法で動かす際にhogehoge.pyという名前でなくhogehogeというスクリプトファイル名でもよいと思います。コマンド名だけで起動できるのですが末尾の".py"を打ち込むのが面倒ならhogehogeという名前にしてもよいですし、「pythonスクリプトで作成したコマンド」ということが分かった方がよいという理由で拡張子を.pyのままにしておくのもよいと思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る