DOS 명령을 Bash 명령으로 변환

DOS 명령을 Bash 명령으로 변환

Bash가 인수가 포함된 DOS 명령을 수락하도록 한 다음 기본 명령을 Bash 명령으로 변환하고 인수가 있으면 계속 사용해야 합니다.

내가 잃어버린 부분은 *) Command Not Found!에 갇히지 않고 개별 사례에 인수를 전달하는 방법입니다.

예를 들어 사용자 입력은 다음과 같습니다.

copy file1.txt file2.txt

사용 사례: copy그런 다음 Linux 명령을 실행 cp하고 복사본을 전달한 두 인수로 완료해야 합니다.

#!/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. 한 가지 용도는 filename 매개변수에서 DOS와 유사한 경로 이름을 자동으로 감지하고 이를 더 복잡한 DOS 명령의 매개변수로 변경하거나 재배열하는 것 C:\입니다 ./

이것의 장점은 DOS 별칭과 함께 Unix 쉘 명령을 계속 사용할 수 있고 원할 경우 더 복잡한 복합 쉘 명령 구조에서 DOS 명령을 사용할 수도 있다는 것입니다.

답변3

이러한 DOS 명령의 별칭을 .bashrc에 추가하고 해당 명령을 해당 Bash 대응 항목에 매핑하는 스크립트를 작성해 보는 것은 어떨까요? 또한 스크립트를 사용하여 이러한 항목을 쉽게 제거할 수 있으므로 기본적으로 bash 환경을 한 컴퓨터에서 다른 컴퓨터로 이동할 수 있습니다.

원본 .bashrc를 .bashrcbak로 이동하고 파일을 제자리에 배치한 다음 복원하고 싶을 때 원래 위치로 다시 이동하도록 할 수도 있습니다.

또는 다음과 같이 단일 세션 별칭을 만들 수 있습니다.https://unix.stackexchange.com/a/148928/321418

관련 정보