-p
플래그 mkdir
가 기본적으로 설정되어서는 안되는 이유 가 없습니다.
-p, --parents no error if existing, make parent directories as needed
내가 볼 수있는 것에서 비파괴적인 명령입니다. 이것이 작동하는 방식에 중요한 것을 놓친 적이 있습니까?
둘째, 이것을 기본 동작으로 만드는 쉬운 방법이 mkdir
있습니까?
mkdp
-p
플래그 mkdir
가 기본적으로 설정되어서는 안되는 이유 가 없습니다.
-p, --parents no error if existing, make parent directories as needed
내가 볼 수있는 것에서 비파괴적인 명령입니다. 이것이 작동하는 방식에 중요한 것을 놓친 적이 있습니까?
둘째, 이것을 기본 동작으로 만드는 쉬운 방법이 mkdir
있습니까?
mkdp
답변:
이것은 특히 스크립트에서 바람직하지 않은 선택적 기능입니다. 스크립트의 경우 다음과 같은 단점을 고려하십시오.
/usr/local/lib/GreatSoftware/ImportantPartOfIt
하위 디렉토리에 넣어야 하지만 라이브러리는 아래에있는 것들에 의존합니다 /usr/local/lib/GreatSoftware
. 이것이 없으면 스크립트는 계속 진행되어서는 안됩니다.mkdir
이러한 상황이보고되고 바로 잡힐 수 있으므로 일반적인 동작은 쉽고 자연스러워집니다.
mkdir -p
쉘에서 항상 사용하려면 별명을 만들 수 있습니다 .
alias mkdir='mkdir -p'
(이것은 .bashrc
쉘이 사용하는 구성으로 이동해야 합니다.)
alias mkdp="mkdir -p"
것이 좋습니다.
.bashrc
은 (일반적으로) 환경에 영향을 미치지 않습니다.
alias rm='rm -i'
입니다.
rm -i
별칭이 항상 나쁜 것으로 생각하지는 않지만 나쁜 습관으로 이어질 수 있습니다. 모든 명령 별칭이 동일 ls="ls --color=auto"
하거나 나쁜 것은 아닙니다 ssh="TERM=xterm ssh"
. 예를 들어 고려하십시오 .
물론 부모 디렉토리 생성이 기본값이어야한다고 주장 할 수 있으며 부모가 존재하지 않는 경우 디렉토리 생성을 막기 위해 일부 확인 옵션을 사용할 수 있습니다.
그러나 그것이 반대의 이유는 단지 역사입니다. mkdir 의 기본 버전은 상위 디렉토리를 작성하지 않았습니다. 그렇기 때문에 X11 배포판 에이 작업을 수행 할 수있는 mkdirhier 라는 명령이 제공되었습니다 . 상위 디렉토리가 있는지 확인하고 필요한 경우 작성하십시오.
나중에이 기능은 많은 UNIX 버전에서 mkdir 명령에 추가되었습니다 (현재 POSIX 표준인지 여부는 모르겠습니다). 호환성을 유지하기 위해 옵션 플래그를 설정하여이 기능을 사용할 수 있습니다 -p
.
기본적으로 켜져있는 것이 나쁜 이유는 무엇입니까? 부모 디렉토리가 존재하지 않으면 스크립트는 mkdir 실패 에 의존 할 수 있습니다. 특히 사용자 루트 로서 기본적으로 디렉토리 트리를 작성하는 것은 위험 할 수 있습니다.
예:
if mkdir /backup/$(uname -n)/$(date +%Y%m%d)
then
perform_backup ...
이 예제에서는 디렉토리가 작성되고 파일 시스템 /backup
이 마운트 /backup/$(uname -n)
되지 않았고 기본값이 다른 경우 상위 가 존재하지 않는 경우 에도 백업이 수행 됩니다.
경험 법칙 : 도구의 기본 동작을 변경하지 않는 것이 좋습니다. 원하는 경우 기본 동작을 변경할 수있는 옵션을 제공하십시오.
에서 시작 만 베어 있었다 mkdir
명령. Unix의 디자인 원칙에 따라이 간단한 명령은 하나의 간단한 작업 인 디렉토리 만들기를 수행했습니다.
나중에 호출자가 특정 경로가 존재하는지 확인하기 위해 하나 이상의 디렉토리를 0 개 만들려는 일반적인 사용 사례를 처리 mkdir
하는 -p
옵션을 얻었습니다 . 여러 가지 이유로 기본 작업이되지 않았습니다. 첫째, 모든 시스템에 이보다 복잡한 기능이있는 것은 아니며 -p
옵션이 필요하다는 것은이 스크립트를 사용하는 스크립트가 mkdir: invalid option -z
때때로 디렉토리를 이상하게 작성하는 데 실패하지 않고 합리적인 오류 메시지 (와 같은 것)를 얻는 것을 의미했습니다 . 둘째로, 가장 중요한 것은 행동이 모든 경우에 mkdir -p
호환되는 대체품이 아니라는 것 mkdir
입니다.
특히, 가장 fileystems에 mkdir
인 원자 조작 . 프로그램이 실행 mkdir playground
되고 명령이 성공하면 프로그램은 playground
디렉토리를 만들었다는 것을 알게 됩니다. 이를 통해 프로그램은 새 디렉토리를 전용 놀이터로 취급 할 수 있습니다. 동일한 프로그램의 다른 인스턴스가 동시에 실행중인 경우 호출 mkdir playground
이 실패합니다. 이 속성은 mkdir -p
인수가 존재할 수 있기 때문에 제공되지 않습니다.
mkdir -p
시작부터 존재 했다면 mkdir -a
단일 디렉토리 작성 명령 과 같은 기본 모드로 설정되었을 수 있습니다 . 그러나 이것은 일반적인 유닉스 디자인 철학을 따르지 않았을 것입니다. 대부분의 기본 유틸리티는 기본 옵션을 둘러싼 단순한 래퍼이며 멋진 옵션 (한 번에 여러 디렉토리를 만드는 것과 같은)의 행동이 있습니다.
alias mkdir="mkdir -p"
.