web-dev-qa-db-ja.com

Cygwinデスクトップショートカット以外の場所からbashを実行すると、「コマンドが見つかりません」エラーが発生します

WindowsでCygwin64ビットを実行しています。

Cygwinインストールに付属の「Cygwin64ターミナル」デスクトップショートカットを使用してminttyのインスタンスを起動すると、正常に実行され、インストールされているすべてのコマンドが機能します。

ただし、mintty.exeに含まれている場所からC:\cygwin64\binを起動すると、command not foundエラーが発生します。

また、テンキーを押すとデスクトップディレクトリでmintyy.exeインスタンスを起動するAutoHotKeyスクリプトが設定されています。この方法でmintyyを起動すると、command not foundエラーも発生します。 cdを他のディレクトリに移動したり、cdを単独で実行したりしても、これは修正されません。重要なのは、minttyインスタンスが最初に実行された場所だけです。

エラーを表示するコマンドのいくつかは次のとおりです。

killall
man
info
wc
which
ssh
clear

これらのほとんどは基本のCywginパッケージの一部として含まれているため、Cygwinインストールの一部として確実にインストールされるため、ここで何が起こっているのかよくわかりません。

動作するコマンド一般的にターミナルでhelpを実行したときにリストされているコマンドに制限されているようです。これがそのコマンドの全体の出力です。

$ help
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
These Shell commands are defined internally.  Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the Shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

job_spec [&]                            history [-c] [-d offset] [n] or hist>
(( expression ))                        if COMMANDS; then COMMANDS; [ Elif C>
. filename [arguments]                  jobs [-lnprs] [jobspec ...] or jobs >
:                                       kill [-s sigspec | -n signum | -sigs>
[ arg... ]                              let arg [arg ...]
[[ expression ]]                        local [option] name[=value] ...
alias [-p] [name[=value] ... ]          logout [n]
bg [job_spec ...]                       mapfile [-d delim] [-n count] [-O or>
bind [-lpsvPSVX] [-m keymap] [-f file>  popd [-n] [+N | -N]
break [n]                               printf [-v var] format [arguments]
builtin [Shell-builtin [arg ...]]       pushd [-n] [+N | -N | dir]
caller [expr]                           pwd [-LP]
case Word in [PATTERN [| PATTERN]...)>  read [-ers] [-a array] [-d delim] [->
cd [-L|[-P [-e]] [-@]] [dir]            readarray [-n count] [-O Origin] [-s>
command [-pVv] command [arg ...]        readonly [-aAf] [name[=value] ...] o>
compgen [-abcdefgjksuv] [-o option] [>  return [n]
complete [-abcdefgjksuv] [-pr] [-DE] >  select NAME [in WORDS ... ;] do COMM>
compopt [-o|+o option] [-DE] [name ..>  set [-abefhkmnptuvxBCHP] [-o option->
continue [n]                            shift [n]
coproc [NAME] command [redirections]    shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilnrtux] [-p] [name[=v>  source filename [arguments]
dirs [-clpv] [+N] [-N]                  suspend [-f]
disown [-h] [-ar] [jobspec ... | pid >  test [expr]
echo [-neE] [arg ...]                   time [-p] pipeline
enable [-a] [-dnps] [-f filename] [na>  times
eval [arg ...]                          trap [-lp] [[arg] signal_spec ...]
exec [-cl] [-a name] [command [argume>  true
exit [n]                                type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or ex>  typeset [-aAfFgilnrtux] [-p] name[=v>
false                                   ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
fc [-e ename] [-lnr] [first] [last] o>  umask [-p] [-S] [mode]
fg [job_spec]                           unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMAND>  unset [-f] [-v] [-n] [name ...]
for (( exp1; exp2; exp3 )); do COMMAN>  until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name >  variables - Names and meanings of so>
getopts optstring name [arg]            wait [-n] [id ...]
hash [-lr] [-p pathname] [-dt] [name >  while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...]               { COMMANDS ; }

ただし、さらに紛らわしいことに、pingはこのリストの一部ではなく、機能します。

誰かがここで何が起こっているのか分かりますか?

1
Hashim
  1. ディレクトリC:\cygwin64\にファイルCygwin.batがあるはずです(Windowsのターミナル別名CMDでbashを実行します)、minttyの代わりに使用するか、mintty consoleの場合、cygwinの環境を正しくセットアップするには、\full\path\to\mintty -(ダッシュ-文字はコマンドの一部です!!!)として起動する必要があります。 「AutoHotKeyスクリプト」でこれを修正して、問題を解決してください。
    minttyの末尾のダッシュ-文字は、bash -lと同じように機能します。これはログインシェルとして使用されます。最後にダッシュなしでminttyを使用すると、cygwin環境をセットアップせずに通常のexeファイルとして動作しますが、-オプションを使用すると、システムへの通常の「ログイン」をエミュレートします。
  2. あなたが探しているプログラムを確認してください
    killall man info wc which ssh clear
    cygwinインストールファイルsetup.exeを再度実行してインストールし、検索フィールドにこれらのプログラムを入力すると、インストール済みかどうかがリストに表示されます。それらをインストールすることを確認し、インストール済みとしてマークされていない場合は次に進みます。
  3. pingを呼び出すとき、cygwinではなくWindowsバージョンのpingを実行します。pingをインストールしたときにcygwinパッケージをインストールした場合は、それが配置されているフルパスで呼び出す必要があります。
    C:\cygwin64\bin\ping.exe(またはcygwinのターミナル内にいる場合は/bin/ping)、それ以外の場合はウィンドウバージョンのpingが実行されます。

Cygwinは、2つの操作モードで使用できます。1つは、Windowsプログラムまたはbatファイルから直接cygwinのユーティリティを呼び出す場合(たとえば、batファイルでgrepを使用する場合)、2つ目の操作モードは、 unixベースのオペレーティングシステムをエミュレートします。これを行うには、仮想オペレーティングシステム(別名cygwin)にログインする必要があります。 mintty - ターミナル(またはbash -l)は、実際のUNIXベースのオペレーティングシステムにログインすると、すべての環境をそのまま正しくセットアップします。

3
Alex

PATHを適切に設定するには、minttyにログインシェルとしてシェルを実行するように指示する必要があります。

可能な方法:

C:\cygwin64\bin\mintty.exe -
C:\cygwin64\bin\mintty.exe /bin/bash -l

詳細については、man minttyを参照してください。
-または適切なbashコマンドがない場合でも、PATHはCygwinディレクトリのないWindowsのものです。

1
matzeri