B 스크립트의 Linux "cp" 명령

B 스크립트의 Linux "cp" 명령

이 bash 스크립트가 있습니다.

#!/bin/bash

OriginFilePath="/home/lv2eof/.config/google-chrome/Profile 1/"
OriginFileName="Bookmarks"
OriginFilePathAndName="$OriginFilePath""$OriginFileName"

DestinationFilePath="/home/Config/Browser/Bookmarks/ScriptSaved/Chrome/Profile 1/"
DestinationFileName=$(date +%Y%m%d-%H%M%S-Bookmarks)
DestinationFilePathAndName="$DestinationFilePath""$DestinationFileName"

echo cp \"$OriginFilePathAndName\" \"$DestinationFilePathAndName\"
cp \"$OriginFilePathAndName\" \"$DestinationFilePathAndName\"

명령줄에서 실행하면 다음과 같은 결과가 나타납니다.

[~/]
lv2eof@PERU $$$ csbp1
cp "/home/lv2eof/.config/google-chrome/Profile 1/Bookmarks" "/home/Config/Browser/Bookmarks/ScriptSaved/Chrome/Profile 1/20211207-001444-Bookmarks"
cp: target '1/20211207-001444-Bookmarks"' is not a directory

[~/]
lv2eof@PERU $$$ 

그래서 오류가 발생하고 파일이 복사되지 않습니다. 그럼에도 불구하고 명령줄에서 명령을 실행하면 다음과 같습니다.

[~/]
lv2eof@PERU $$$ cp "/home/lv2eof/.config/google-chrome/Profile 1/Bookmarks" "/home/Config/Browser/Bookmarks/ScriptSaved/Chrome/Profile 1/20211207-001444-Bookmarks"

[~/]
lv2eof@PERU $$$ 

보시다시피 모든 것이 잘 작동하고 파일이 복사되었습니다. 이 명령은 bash 스크립트 내부와 외부에서 동일한 방식으로 작동해야 하지 않습니까? 내가 뭘 잘못했나요?

답변1

알아차리기 어려울 수도 있지만 메시지는 두 가지 힌트를 제공합니다.

cp: target '1/20211207-001444-Bookmarks"' is not a directory
           |                           |
           |                           +-- Notice quote
           +-- Space in target

즉, 1/20211207-001444-Bookmarks"디렉토리가 아닙니다. 그럼 왜 그런 말을 하는 걸까요?

스크립트에는 다음이 있습니다.

cp \"$OriginFilePathAndName\" \"$DestinationFilePathAndName\"

통과탈출 따옴표, 따옴표가 매개변수의 일부라는 뜻입니다. 대안: 위협 인용문을 리터럴 텍스트로 표시합니다. 그들은시리즈로변수의 값으로.

해야 한다:

cp "$OriginFilePathAndName" "$DestinationFilePathAndName"

간단히 말해서, bash에게 알리기 위해 변수를 인용합니다.이는 매개변수로 논의되어야 합니다..

귀하의 질문에 따르면 실제 매개변수는 cp2가 아닌 4가 됩니다.

  1. "/home/lv2eof/.config/google-chrome/Profile
  2. 1/Bookmarks"
  3. "/home/Config/Browser/Bookmarks/ScriptSaved/Chrome/Profile
  4. 1/20211207-001444-Bookmarks"

즉, 1, 2, 3을 4로 복사합니다.

관련 정보