36976


当方、Xubuntu16.04 64bitです。  
terminal上で`./`から始まるスクリプト系のコマンドを実行しようとすると、  
`コマンドが見つかりません`とエラーを返されてしまいます。  
`sudo`をつけて実行しても同様の結果になります。  
何かパッケージが足りないのでしょうか。

* * *

**追記**

### ファイルの所在について

[code]

    ❯❯❯ cd ~/mozc-2.18.2598.102+dfsg-1\~ut2-20170529
    ~/mozc-2.18.2598.102+dfsg-1~ut2-20170529 ❯❯❯ ls
    mut  build_mozc_plus_utdict  mozc_2.18.2598.102+dfsg-1~ut2-20170529_amd64.build
    
[/code]

### コマンド入力時

[code]

    ~/mozc-2.18.2598.102+dfsg-1~ut2-20170529 ❯❯❯ sudo ./build_mozc_plus_utdict
    [sudo] claude0803sz のパスワード: 
    sudo: ./build_mozc_plus_utdict: コマンドが見つかりません
    
[/code]

### シェルスクリプトのソース

[code]

    #!/bin/sh
    
    # mozcのビルドに必要なパッケージをインストールする
    # apt-get install -y clang-3.5 libgtk2.0-dev debhelper libibus-1.0-dev build-essential libssl-dev libxcb-xfixes0-dev python-dev gyp protobuf-compiler libprotobuf-dev libqt4-dev libuim-dev libzinnia-dev fcitx-libs-dev devscripts ninja-build
    
    cd ./mut/
    
    debuild -b -uc -us -d
    
    cd -
    
    rm -rf ./mut/
    
    echo '終了\n'
    
[/code]

やりたいのはmozcのbuildとインストールです  
(参考記事)<http://sicklylife.hatenablog.com/entry/2016/11/22/192850>

* * *

ソースを再ダウンロードし、再試行したところ実行出来ました。  
原因はソースをWindows上で展開したことによる改行コードの違いだと思われます。


CC BY-SA 3.0
2017-07-22T20:18:25.980
36597
2020-07-25T06:01:23.587
2017-08-07T06:17:32.873
21018
21018
question
linux ubuntu
Xubuntu16.04で./系コマンドが実行できない


たぶん `/.` は `./` の間違いなのでは？

`/.`
で始まるファイルということはルートディレクトリにある隠しファイルの意味です。これが実行可能形式ファイル（シェルスクリプト）であるということは限りなく考えにくいです。

`./` は同様、カレントディレクトリにあるファイルの意味なので、ここにあなた（一般ユーザー）が作成した実行可能形式ファイルが存在するのは普通の話です。


CC BY-SA 3.0
2017-07-22T20:49:31.277
36598
2017-07-22T20:49:31.277
8589
36597
answer


実行ファイルを正しく指定できていないのではないでしょうか。

`./`
から始まるパスで実行ファイルを指定するときは、今いるディレクトリからの相対パスでファイルを指定しています。つまり、カレントディレクトリが変わればどのファイルを指定しているかも変わってしまいます。

その実行ファイルが存在しているか `ls` コマンドで確認したり、カレントディレクトリを `pwd` コマンドで確認したりしてください。

たとえばこんな感じです。

[code]

    $ ls
    aaa.sh  testdir
    $ ls testdir/
    bbb.sh
    $ ./aaa.sh
    # ==> 実行される
    $ ./bbb.sh
    bash: ./bbb.sh: そのようなファイルやディレクトリはありません
    $ ./testdir/bbb.sh
    # ==> 実行される
    $ cd testdir
    $ ./bbb.sh
    # ==> 実行される
    
[/code]


CC BY-SA 3.0
2017-07-22T22:29:54.937
36599
2017-07-22T22:56:46.407
2017-07-22T22:56:46.407
19110
19110
36597
answer


考えられるのは、スクリプトの先頭行に記述しているコマンドが存在しない、という理由です。  
`sh`スクリプトであれば

[code]

        #!/bin/sh -
    
[/code]

や

[code]

        #!/bin/bash -
    
[/code]

とか記述されていると思いますが、これ(`/bin/sh`, `/bin/bash`)が存在しない、という意味です。

そうであれば、存在するパス(例: `/usr/bin/sh`, `/usr/bin/bash`)に修正すると、実行可能になると思います。

あと考えられるのは、実行しようとしているスクリプトファイルの実行ビットが立っていない、という理由です。


CC BY-SA 3.0
2017-07-22T23:29:32.580
36600
2017-07-22T23:35:09.540
2017-07-22T23:35:09.540
20098
20098
36597
answer


シェルスクリプトの中身を見る限り「コマンドが見つかりません」のエラーは恐らく`debuild`コマンドがインストールされていないのが原因ではないでしょうか。  
スクリプトのコメント中に記載されている、`apt-get`で必要なパッケージ群を事前にインストールしてから再度スクリプトを実行し直してみてください。  
(実際に実行する場合は`sudo apt-get install ...`ですね)

[code]

    # apt-get install -y clang-3.5 libgtk2.0-dev debhelper \
        libibus-1.0-dev build-essential libssl-dev libxcb-xfixes0-dev \
        python-dev gyp protobuf-compiler libprotobuf-dev libqt4-dev \
        libuim-dev libzinnia-dev fcitx-libs-dev devscripts ninja-build
    
[/code]

**補足**  
シェルスクリプトを実行したが何らかのエラー等で正常終了しない場合、コマンドラインからオプションを付けて実行することで原因箇所の絞り込みがある程度できます。  
今回の例だと`sh`スクリプトなので、以下のように`-x`や`-v`オプションを付けて実行します。

[code]

    $ sh -vx ./build_mozc_plus_utdict
    
[/code]

**余談**  
`sudo`はあくまでアクセス権限の管理に使うコマンドなので、今回のように「コマンドが見つからない」からと安易に付け足して実行するのはあまりおすすめしません。  
パッケージのインストールなど **権限が必要な場面でのみ** 使用するようにしましょう。


CC BY-SA 4.0
2017-08-05T05:00:07.783
36956
2020-07-25T06:01:23.587
2020-07-25T06:01:23.587
3060
3060
36597
answer


シェルスクリプトの改行コードが間違っている可能性があります。

シェルスクリプトを編集しませんでしたか?  
Ubuntu など Linux/UNIX では改行コードは LF ですが、Windows は CR+LF です。  
Windows のエディタで編集すると CR+LF に書き換わってしまうことがあります。

以下のようにして確認してみてはいかがでしょうか。

[code]

    luna:/t/t/mozc-2.18.2598.102+dfsg-1~ut2-20170529 % od -tx1c build_mozc_plus_utdict  | head -2
    0000000  23  21  2f  62  69  6e  2f  73  68  0d  0a  0d  0a  23  20  6d
              #   !   /   b   i   n   /   s   h  \r  \n  \r  \n   #       m
    
[/code]

これは CR+LF の例です。このように `\r` (←これが CR) が含まれていると、実行できません。  
その場合は、エディタで改行コードを LF のみに設定して保存してください。


CC BY-SA 3.0
2017-08-06T09:15:17.447
36976
2017-08-06T09:22:05.613
2017-08-06T09:22:05.613
5288
5288
36597
answer