2009-02-06 3 views
1

매우 간단한 bash 스크립트 인 my_copy.sh을 작성하여 임의의 수의 입력 파일과 대상 디렉토리를 읽고 원하는 경우 확인하도록 최종 요청합니다. 파일을 복사하십시오.파일을 사용자 입력에 따라 디렉토리에 복사하고 *를 사용하여 파일을 나열하십시오.

사용 예제 : 대상 디렉토리가 존재하지 않는 ./my_copy.sh

Type in the file names to copy: 
file1 file2 Anna Kurt Arne 
Type in the directory to copy to: 
dir_3 
Are you sure you want to copy the files: 
Anna 
Kurt 
Arne 
to the directory dir_3 (y/n)? 

경우,이 스크립트에 의해 생성되어야한다.


내 다음 질문 :

나는 * 문자가 간단한 ls 명령을 수행합니다. 따라서 ./my_copy *을 입력하면 명령 줄에 내 디렉토리의 모든 파일을 나열해야합니다.

+1

당신은 두 개의 별도의 질문을해야한다! – hop

+0

제안하는 스크립트는 매우 유닉스 계열이 아닙니다. 왜 사용자가 손으로 모든 파일 이름을 입력하도록 강요하고 쉘 globbing, 탭 완성 등을 사용할 수 없게할까요? – hop

+0

귀하의 질문에 약간의 퍼지가 ... 다음을 설명하십시오 : 1) file1과 file2에 무슨 일이 일어 났습니까? 2) "내 디렉토리"란 무엇입니까? – hop

답변

1

두 번째 질문은 상당히 어렵습니다. 쉘은 *를 해석하고 현재 디렉토리의 모든 항목으로 바꿉니다. 셸이 인수 목록의 유일한 항목으로 a *를 제공하는 유일한 방법은 디렉토리의 모든 파일에 점으로 시작하는 이름이있는 경우입니다. 따라서 예제 명령은 실제로 $ 0 = my_copy 및 $ 1 = my_copy로 호출됩니다.

4

스크립트를 호출 할 때 *가 이스케이프되거나 인용되지 않으면 쉘은 스크립트를 가져 오기 전에 이스케이프 처리되거나 확장됩니다.

./my_copy '*'

또는

./my_copy \ *

당신이 주변에 간단한 확인 래퍼를 추가하려는 것 같습니다

'cp'. 아니면 사용자에게 대화 형으로 프롬프트를 표시하려고합니까?

+0

일부 쉘은 사실 환경 변수를 사용하여 어떤 매개 변수가 와일드 카드 확장의 결과인지 나타냅니다. 그러나 사용자가 가지고있는 쉘이 아이디어의 가장 현명한 생각이 아닐 수도 있습니다. – Joshua

4

"cp -i"를 사용하면 덮어 쓰기 전에 대화식으로 프롬프트를 표시 할 수 있습니다. 또한 .bash_profile에 별칭으로 추가 할 수 있으므로 항상 프롬프트됩니다.

0

당신은 인자로 * 줄 수는 없지만, 예를 들어 문자 "E"로 대체하고이 작업을 수행 할 수 있습니다

if [ "$1" = "e" ] 
then 
    ls 
else 
    return 0 
fi 
관련 문제