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
またはを使用します。quit
Ctrl+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