rm -rf ./folder 대신 rm -rf "`pwd`/folder를 사용하세요.

rm -rf ./folder 대신 rm -rf "`pwd`/folder를 사용하세요.

왜 명령을 사용해야합니까?

rm -rf "`pwd`/folder"

바꾸다

rm -rf ./folder

둘 중 하나를 선택해야 하는 이유가 있나요?

답변1

rm -rf "`pwd`/folder"안타깝지만 사용하면 안 됩니다. 이는 극단적인 경우에만 발생하지만 이러한 극단적인 경우에는 잘못된 디렉터리가 삭제되는 보안 문제가 될 수 있습니다. 극단적인 경우는 현재 디렉토리가 개행으로 끝나는 것입니다. 명령 대체는 후행 개행을 제거하므로 현재 디렉토리가 /some/where/strange⏎(여기서 ⏎는 개행을 나타냄) 경우 이 명령은 대신 삭제됩니다 /some/where/strange.

이 변형은 이 명령을 사용하는 것에 비해 rm -rf "$PWD/folder"단점이 없으며 pwd장점은 후행 개행의 코너 케이스로 인해 어려움을 겪지 않는다는 것입니다. 모든 Bourne/POSIX 쉘은 PWD모든 디렉토리 변경 명령( 등) cd후에 변수를 업데이트하며 pushd내장 명령 출력과 동일한 값을 갖습니다. pwd(외부 pwd명령은 출력이 다를 수 있지만 1. pwd내장 명령이 존재하고 모든 공통 쉘에 하나가 있으면 내장 명령이 호출되고 2. 어쨌든 여기서 외부 명령을 사용해도 이점이 없습니다.)

rm -rf "$PWD/folder"하지만 에 비해 장점은 없습니다 rm -rf ./folder. 피팅 시 최대 명령줄 길이를 rm -rf "$PWD/folder"잠재적으로 초과할 수 있다는 이론적 단점이 있습니다 . rm -rf ./folder그러나 최대 명령줄 길이는 거의 항상 최대 파일 경로 길이보다 상당히 크므로 단일 경로를 사용하는 명령은 거의 항상 적합합니다.

"$PWD/$foo"대신 사용 "$foo"하면 대시로 시작하지 않는다는 장점이 있습니다.옵션인 것 같다. 변수인 경우에만 경로가 스크립트에 명시적으로 표시된 경우에는 문제가 되지 않습니다. "./$foo"동일한 보호를 제공합니다 . 상대 경로인 경우에만 "$PWD/$foo"정확합니다 . 그래서 비교해서 장점이 없습니다. 위에서 언급했듯이 더 짧은 상대 형식을 사용하면 많은 경로가 관련된 경우 명령줄 길이 제한을 유지하는 데 도움이 될 수 있습니다."./$foo"$foorm -rf "$PWD/$foo"rm -rf "./$foo"

를 사용하면 나중에 사용하기 위해 변수에 저장하는 것보다 "$PWD/folder"분명한 이점이 있습니다 "./folder". 그 동안 스크립트가 다른 디렉터리로 변경되더라도 계속해서 동일한 파일을 지정합니다. rm -rf "./folder"완전히 괜찮지 만 이와 같은 코드에는 절대 경로가 필요합니다.

output_directory="$PWD/output"
# If interrupted, delete the partial output.
trap 'rm -rf "$output_directory"; exit 1' HUP INT TERM

do_stuff >"$output_directory/file1"
do_more_stuff >"$output_directory/file2"
cd "$output_directory"
further_stuff file1 file2 >file3

$output_directory상대 경로인 경우 삭제 코드는 명령 cd전후에 작동할 수 있지만 둘 다에는 작동하지 않습니다.

관련 정보