2017-10-27 3 views
1

디렉토리를 변경하여 각 디렉토리에서 작업을 수행하고 싶습니다. 되는 다음 코드 :리눅스에서 루프를 사용하여 디렉토리를 변경하십시오.

for i in {1..10} 
do 
cd dir/subdir$i 
bla... bla.. bla.. 
done 

그러나 나는 점점 오전 오류 :

cd $(echo dir/subdir"$i") 
cd $(eval dir/subdir"$i") 
+0

https://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script –

+0

첫 번째 형식은 괜찮지 만 원래 디렉토리로 돌아가거나 서브 쉘에서 cd'ing (그리고 연산)을하고 있는지 확인해야합니다 (즉,'cd dir/subdir $ i ; bla bla bla; – PSkocik

+0

'cd//subdir $ i'을 주려고합니다. –

답변

2

이 문제는 아마도 때문이다 : 나는 다음하지만 여전히 같은 위의 오류가 시도

not found [No such file or directory] 

변경하려는 모든 디렉토리는 원래 기본 디렉토리에서 상대적입니다.

for i in {1..10}; do 
    cd dir/subdir$i || continue 
    cmd1 
    cmd2 
    cd "$OLDPWD" 
done 

또 다른 방법은 pushdpopd을 사용하는 것입니다

for i in {1..10}; do 
    (
    cd dir/subdir$i || continue 
    cmd1 
    cmd2 
    ) 
done 

또 다른 방법은 cd "$OLDPWD"를 사용하여 이전 디렉토리로 반환하는 것입니다 :이 문제를 해결하기 위해 한 가지 방법은 (...) 서브 쉘을 사용하고 있습니다 :

for i in {1..10}; do 
    pushd dir/subdir$i || continue 
    cmd1 
    cmd2 
    popd 
done 
+0

오프 주제어 때문에 이미 upvoted : 'cd1'과'cmd2'는'cd'가 실패 할 때 생략되어야한다고 생각합니다. 아마도'cd dir/subdir $ i && cmd1 && cmd2'를 제안 할 것입니다. –

+0

@WalterA 좋은 지적, 고마움, 나는 내 대답을 고쳤다. – janos

관련 문제