이 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에게 알리기 위해 변수를 인용합니다.이는 매개변수로 논의되어야 합니다..
귀하의 질문에 따르면 실제 매개변수는 cp
2가 아닌 4가 됩니다.
"/home/lv2eof/.config/google-chrome/Profile
1/Bookmarks"
"/home/Config/Browser/Bookmarks/ScriptSaved/Chrome/Profile
1/20211207-001444-Bookmarks"
즉, 1, 2, 3을 4로 복사합니다.