57900


Windows 10 上で cmd.exe と WSL のシェル (Bash) とを行き来していると、標準的なコマンドの差で躓くことが多々あります。私は
Bash の方が良く使うので、特に cmd.exe 上で Linux 用のコマンドを誤って打ち込んでしまうことがあります。

たとえば cmd.exe 上で `ls` と打って「コマンドとして認識されていません」という趣旨のエラーが出て初めて `dir`
を思い出すことが良くあります。他にも文字列を出力するつもりで`echo foobar` と打ってしまうと、cmd.exe 側にある同名の別コマンド
`echo` が呼び出されてしまいます。

このような打ち間違いは、上のような例だとかわいいものですが、きっといつかもっと深刻な例を引き起こすのではないかと心配しています。

そこで、何かしら打ち間違い自体を阻止したり、打ち間違いがあっても実行前にエラーや確認メッセージが出るなどして最低限の影響で抑えられたりするような、技術的な解決法はないでしょうか？
「cmd.exe で操作するときは伸びをしてからにする」みたいな慣習的方法ではなく、機械による (半) 自動的な方法を探しています。使用頻度は
cmd.exe の方が低いので、cmd.exe 側は多少操作が面倒になっても大丈夫です。cmd.exe を使うのは、たとえば Windows
側にインストールされた Go コンパイラを使いたいときなどです。

ただし cmd.exe
側のコマンドにあまり詳しくないのでそもそも「どっちでも動いてしまうようなコマンド」がどの程度あるのかも良く分かっておらず、この心配が杞憂の可能性もあるとは思っています。そうであればそのように回答頂ければ幸いです。


CC BY-SA 4.0
2019-09-06T04:30:52.657
57896
2019-09-09T00:21:41.127
2019-09-06T08:23:11.593
19110
19110
question
linux command-line cmd
cmd.exe で Linux 用コマンドを打ってしまうことを想定した対策


質問の意図とちょっとずれるかもしれませんが、良く打ち間違うコマンド名のバッチファイルを作っておいて、間違っても意図した動作になるようにする、というのが一つの手ではないでしょうか。

ls.batの内容

[code]

    @echo off
    dir
    
[/code]

とか(コマンドラインオプションも必要応じて追加してもいいと思います)。


CC BY-SA 4.0
2019-09-06T06:08:41.860
57899
2019-09-06T06:08:41.860
9515
57896
answer


すべての打ち間違いを網羅することは難しいと思うので、あらかじめ把握しているいくつかのコマンドで注意を促す方法を考えてみます。

* * *

cmd.exeでは`doskey`でマクロ、Linuxでの`alias`のようなものを定義できます。

[code]

    C:\> doskey ls=echo * Linuxじゃないよ！
    
[/code]

必要なマクロを一通り設定した後、いったんテキストファイルに書き出しておき、cmd.exe起動時にそのファイルを読み込ませることで常に有効となるようにします。

[code]

    C:\> doskey /macros > %USERPROFILE%\macros.txt
    C:\> doskey /macrofile=%USERPROFILE%\macros.txt
    
[/code]

cmd.exeのショートカットのプロパティで引数にいくつかのパラメータを追加します。

[code]

    cmd.exe /k doskey /macrofile=%USERPROFILE%\macros.txt
    
[/code]

* * *

その他のアプローチとしてはターミナル等の背景色等をそれぞれ変更するとかですかね。ツールによっては画像を設定できるので、OSのロゴ等を表示させてもいいかもしれません。


CC BY-SA 4.0
2019-09-06T06:14:30.820
57900
2019-09-06T06:14:30.820
3060
57896
answer


もう一つの回答は、「cmdでLinuxのコマンドを動かし切る」だと思います。

私の環境(※１)では、cmdでLinuxのコマンドが普通に動きます。  
※残念ながら、何を設定したのかすぐに思い出せません。  
※PATHに通したわけではないようです。

以下実行例です。

[code]

    C:\>ls -l
    total 11433843
    drwxr-xr-x 1 08201 1049089          0 Mar  6  2019 '$GetCurrent'
    drwxr-xr-x 1 08201 1049089          0 May 15  2018 '$Recycle.Bin'
    drwxr-xr-x 1 08201 1049089          0 Jul 24 17:04 '$WINDOWS.~BT'
    drwxr-xr-x 1 08201 1049089          0 Dec 21  2017  Apps
    　　以下略
    C:\>which ls
    /usr/bin/ls
    
    C:\>pwd
    /c
    
[/code]

どうしてcmdからUnix系コマンドが動くのか、少し調査してみました。

`strace ls`を実行したところ、Gitのmsysに関連するライブラリを読み込んでいました。

[code]

    --- Process 5352 loaded C:\Program Files\Git\usr\bin\msys-intl-8.dll at 000000006c770000
    --- Process 5352 loaded C:\Program Files\Git\usr\bin\msys-2.0.dll at 0000000180040000
    
[/code]

cmdからUnix系コマンドが動くのはGit Bashをインストールしたためだと思います。

なお、比較的きれいなPC(Win10)でWSLを有効化してみました。これだけでは、cmdからlsを実行することはできませんでした。

※１ 私の環境はWin10のWSLです。  
Ubuntu 18.04.3 LTS (GNU/Linux 4.4.0-17763-Microsoft x86_64)  
以下もインストールしています。  
MSYS2、Mingw


CC BY-SA 4.0
2019-09-06T06:36:06.090
57902
2019-09-09T00:21:41.127
2019-09-09T00:21:41.127
35558
35558
57896
answer