2011-07-17 5 views
0

나는 ~ /의 .config에서 설정 파일을 편집 할 수있는 기본 스크립트가 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?배쉬 변수 지정

dir=$HOME/.config/$1 
if [ ! -d "$dir" ]; then : 
    else 
    for file in "$dir" ; do 
     case "$file" in 
     conf | config | *.cfg | *rc) $EDITOR "$file" ;; 
     *) : ;; 
     esac 
    done; 
fi
+1

왜 [if [! -d "$ dir"]; 다음 :; else cd "$ dir"... 단순히'if [-d "$ dir"] 대신; cd "$ dir"...'? –

+0

@ 글렌 감사합니다 : 무지. 순수하고 간단합니다. – Edouard

답변

0

"$ dir"은 단 하나의 항목 (디렉토리)을 제공하기 때문에 사용할 수 없습니다. $ dir/*이 필요하지만 그 경로에도 경로가 포함되어 있으므로 파일 이름 만 비교하면됩니다.

... 
for file in $dir/*; do 
    filename=`basename $file` 
    case $filename in 
    ... 
+0

고맙습니다. 더 잘 이해하기 위해 내가 읽을 수있는 것이 있습니까? – Edouard

+0

@ 에드워드 : 나는 당신을 훌륭한 자원으로 안내 할 수는 없을 것 같습니다. 내가 쉘 스크립팅에 대해 알고있는 대부분의 것들은 즉석에서 포착했습니다. 내가 기억할 수 없기 때문에 나는 "basename"명령을 찾기 위해 구글 검색을해야만했다 :) 기본적으로 "for"는 "in"뒤에 오는 모든 파일을 반복한다. $ dir/*는 "$ dir"디렉토리에있는 모든 파일 목록으로 확장됩니다. $ dir이/foo/bar이고 그 파일에 "baz"라는 파일이 있다면 루프 내에서 $ file은/foo/bar/baz 값을 갖습니다. 'basename' 명령은 경로를 없애고 "baz"를 줄 것입니다. 그게 그걸 설명하니? –

+0

매우 좋습니다. 고맙습니다. – Edouard

1

당신은 단지 $dir 자체를 나열 $dir 내부의 파일을 글 로빙 아닙니다. 시도하십시오 $dir/*.

+0

정확하게! 나를 때려. :-) –

+0

감사 : "$ dir"/ *도 $ dir/* 일도 없습니다. – Edouard

+0

@ 에드워드 :'$ {dir}/*'을 사용해 보셨나요? – Hello71

0

첫 번째 버전은 디렉토리에 *을 작성하여 디렉토리의 모든 파일 목록을 생성합니다. 두 번째 버전은 목록에 하나의 항목 만 포함합니다. 디렉토리의 내용이 아니라 디렉토리 자체입니다.