DOS コマンドを Bash コマンドに変換

DOS コマンドを Bash コマンドに変換

Bashが引数を含むDOSコマンドを受け入れるようにし、基本コマンドをBashコマンドに変換し、引数がある場合は引き続き使用する必要があります。

私が失った部分は*) Command Not Found!に閉じ込めずに個々のケースに引数を渡す方法です。

たとえば、ユーザー入力は次のようになります。

copy file1.txt file2.txt

ユースケース:copyその後、Linuxコマンドを実行しcpてコピーを渡した2つの引数で完了する必要があります。

#!/bin/bash

while :
do
read INPUT_STRING
case $INPUT_STRING in
        chdir|CHDIR)
        cd $arg1
        bash myscript.sh
;;
        cls|CLS)
        clear
        bash myscript.sh
;;
        copy|COPY)
        cp $arg1 $arg2
        bash myscript.sh
;;
        createdir|CREATEDIR)
        mkdir $arg1
        bash myscript.sh
;;
        delete|DELETE)
        rm $arg1
        bash myscript.sh
;;
        dir|DIR)
        ls
        bash myscript.sh
;;
        move|MOVE)
        mv $arg1 $arg2
        bash myscript.sh
;;
        print|PRINT)
        echo $arg1
        bash myscript.sh
;;
        quit|QUIT)
        break
        PS1="n01396736@cisvm-cop4640-2:~$ "
;;
        rename|RENAME)
        mv $arg1 $arg2
        bash myscript.sh
;;
        type|TYPE)
        cat $arg1
        bash myscript.sh
;;
        *)
        echo "Command Not Found!!"
        bash myscript.sh
;;
esac
break
done

答え1

正しい方向を教えてくれたRomiyaとMichael Prokopekに感謝します。これは私が終了し、期待どおりに動作します。バグを発見したり、コードを改善できる場合はお知らせください。これは私が作った最初のLinuxスクリプトです。

#!/bin/bash

counter=1
while : [$counter -lt 2]
do
read -p 'Your Name Here > ' cmd "arg"

case $cmd in
chdir|CHDIR)
        cd $arg
        ;;
cls|CLS)
        clear
        ;;
copy|COPY)
        cp $arg
        ;;
createdir|CREATEDIR)
        mkdir $arg
        ;;
createfile|CREATEFILE)
        touch $arg
        ;;
delete|DELETE)
        rm $arg
        ;;
dir|DIR)
        ls
        ;;
move|MOVE)
        mv $arg
        ;;
print|PRINT)
        echo $arg
        ;;
quit|QUIT)
        counter=2
        ;;
rename|RENAME)
        mv $arg
        ;;
type|TYPE)
        cat $arg
        ;;
*)
        echo "Command Not Found!!"
        ;;
esac
done

答え2

あなたのスクリプトは、コマンド名を代替名に変更するようです。これは、シェルにエイリアスを提供することで簡単に実行できます。

たとえば、

alias remove=rm
alias type=cat
alias dir='ls -l'
alias cls=clear
alias quit=exit

これを次の名前のファイルに入れ、次のようにしてdos_compat対話bash型シェルを起動できます。

bash --rcfile dos_compat

これにより、利用可能なエイリアスを持つ新しいインタラクティブシェルが起動します。元のシェルに戻るには、exitまたはを使用します。quitCtrl+D

単純なエイリアスよりも複雑なDOSコマンドを実装するには、ファイル内でそれをシェル関数として実装する必要がありますdos_compat。 1つの目的は、filenameパラメータでDOSに似たパス名を自動的に検出し、それをより複雑なDOSコマンドのパラメータに変更または再配置することC:\です。/

これの利点は、DOSエイリアスでUnixシェルコマンドを引き続き使用でき、必要に応じてより複雑な複合シェルコマンド構造でDOSコマンドを使用できることです。

答え3

これらのDOSコマンドのエイリアスを.bashrcに追加し、そのコマンドをそのBash対応エントリにマップするスクリプトを書いてみてはいかがでしょうか?また、スクリプトを使用してこれらの項目を簡単に削除できるため、基本的にbash環境をあるコンピュータから別のコンピュータに移動できます。

元の.bashrcを.bashrcbakに移動し、ファイルを適切な場所に配置し、復元したいときに元の場所に戻すこともできます。

または、次のように単一セッションエイリアスを作成できます。https://unix.stackexchange.com/a/148928/321418

関連情報