

リナックスで自分の作ったプログラムをコマンドとして端末から実行するにはどうしたらいいのですか  
Ubuntuを使っています  
例えば  
ハローワールドか表示されるプログラムをhiコマンドで実行するという感じです。


CC BY-SA 3.0
2015-12-15T00:56:12.367
19990
2015-12-15T14:23:50.193
13673
question
linux
コマンドに組み込みたい


Cだと

> $ vi test.c
[code]

    #include <stdio.h>
    int main(void){
            printf("hello\n");
    }
    
[/code]

> $ cc test.c -o hi  
>  $ ./hi
[code]

    hello
    
[/code]

とか。  
sh scriptだと

> $vi hi
[code]

    #!/bin/bash
    echo hello
    
[/code]

> $chmod +x hi  
>  $./hi
[code]

    hello
    
[/code]

とかいかがでしょ？


CC BY-SA 3.0
2015-12-15T01:04:35.127
19992
2015-12-15T01:35:10.293
2015-12-15T01:35:10.293
2383
2383
19990
answer


終極的な目的が

１．「同一マシンの全ユーザーに」そのコマンドを使えるようにする、ならば  
標準設定の環境変数 `PATH` に含まれているディレクトリに、生成した実行ファイルを置く  
（必要ならば権限設定を行う）  
`/usr/local/bin` あたりに配置するのが一般的

２．「自分だけが」そのコマンドを使えるようにする、ならば  
自分個人の設定している環境変数 `PATH` に個人用バイナリのディレクトリ指示を追加し  
そのディレクトリに実行ファイルを置く（必要なら権限設定を行うのは同様）  
`/home/alice/bin` とかにしておくと他人に迷惑をかけない

３．テストしたい試作中のプログラムを実行しようと `$ hi` と入力したら、実行できなかった  
ならば `$ ./hi` とディレクトリ指定を補うとよい

ってとこでしょうか。


CC BY-SA 3.0
2015-12-15T03:01:12.207
19994
2015-12-15T03:01:12.207
8589
19990
answer


前提としてファイルの実行権限が必用なので 必用であれば `chmod` で設定します。  
もしくは、`install` コマンドで指定しても良いです。

[code]

    $ chmod +x /hoge/foo/bin/hi
     もしくは
    $ install -D -m 755 hi /hoge/foo/bin/hi  ← hi を /hoge/foo/bin/hi にコピーして実行権を付与
    
[/code]

3つの実行方法について回答します。

  1. 絶対パスでコマンドを指定
  2. 相対パスでコマンドを指定
  3. 環境変数 `PATH` に書かれたディレクトリの中からコマンドを探して実行

例）絶対パスの場合

[code]

    $ /hoge/foo/bin/hi          ←「/」からの絶対パスで指定
    hello world!
    
[/code]

例）相対パスの場合

[code]

    $ cd /home/user/            ←起点となるディレクトリを移動
    $ ../../hoge/foo/bin/hi     ←起点からの相対パスで指定
    hello world!
    
    $ cd /hoge/foo    ←起点となるディレクトリを移動
    $ ./bin/hi        ←起点からの相対パスで指定
    hello world!
    
[/code]

例）環境変数`PATH`から探して実行

[code]

    $ echo $PATH                                ←環境変数PATHを表示してみる
    /bin:/usr/bin:/usr/local/bin                ←/bin と /usr/bin と /usr/local/bin だと分かる。
    $ sudo install -m 755 hi /usr/local/bin/hi  ←hi を /usr/local/bin にインストール
    $ hi
    hello world!
    
[/code]

コマンドが環境変数`PATH`から探せるようにする行為を一般的に「パスを通す」といいますが、  
環境変数`PATH`を修正して「パスを通す」場合は `export` コマンドを使います。

[code]

    $ install -D -m 755 hi /home/user/bin/hi     ←hi を /home/user/bin にインストール
    $ export PATH=$PATH:/home/user/bin           ←PATH に「:」で区切ってディレクリを追記
    $ echo $PATH
    /bin:/usr/bin:/usr/local/bin:/home/user/bin  ←追加された
    $ hi
    hello world!
    
[/code]

export はログアウトするか端末を終了すると破棄されます。  
毎回入力は面倒なので設定ファイルに記述しておきます。

[code]

    $ vim ~/.bash_profile
    略...
    export PATH=$PATH:/home/user/bin    ←設定ファイルに追記
    
[/code]


CC BY-SA 3.0
2015-12-15T14:23:50.193
20036
2015-12-15T14:23:50.193
5008
19990
answer