다른 작업 디렉터리를 사용하여 명령을 실행하려면 어떻게 해야 합니까?

다른 작업 디렉터리를 사용하여 명령을 실행하려면 어떻게 해야 합니까?

이 쉘 파이프를 사용하여 터미널을 통해 SQL 덤프를 가져옵니다.

$ cd var/lib/mysql && mysqldump -uroot -p"craft" --add-drop-table craft > ~/../docker-entrypoint-initdb.d/base.sql && cd ~/..

보시다시피 var/lib/mysql디렉터리로 가서 파일로 덤프를 만든 다음 원래 위치에서 돌아왔습니다.

명령은 정확하지만 디렉토리로 직접 이동하지 않는 것처럼 더 간결하게 작성할 수 있을 것 같습니다 var/lib/mysql.

누구든지 조언을 해줄 수 있나요?

답변1

솔직히 말해서 둘 다 전화할 이유가 전혀 없습니다 cd.

cd입력한 디렉토리에 대해 아무 작업도 수행 하지 않는 것 같습니다 . 데이터베이스 덤프 위치에 대한 절대 경로를 제공합니다. 사용자 정의 MySQL 구성 파일이 필요한 경우 어쨌든 사용자의 홈 디렉터리에서 얻을 수 있습니다.

따라서 아마도 다음을 사용하게 될 것입니다.

mysqldump -uroot -p"craft" --add-drop-table craft \
    > ~/../docker-entrypoint-initdb.d/base.sql

어떤 디렉터리에서 실행하든 상관없습니다.

답변2

이 경우 작업 디렉토리를 전혀 변경할 필요가 없습니다(Kusalananda의 답변처럼). 그러나 명령을 처리하는 경우하다특정 작업 디렉토리가 필요한 경우 이를 더 쉽게 만들 수 있도록 알아두어야 할 몇 가지 사항이 있습니다.

첫째, 변수가 cdset 이므로 OLDPWD이름을 모르더라도 이를 사용하여 원래 디렉터리로 돌아갈 수 있습니다. 둘째, 명령이 성공했는지 여부를 반환하고 싶으므로 ;대신 사용하세요 &&.

cd "$workdir" && somecommand ; cd "$OLDPWD"

첫 번째가 실패하더라도 cd더 강해지는 것은 여전히 ​​신뢰할 수 없습니다.

if cd "$workdir" ; then somecommand ; cd "$OLDPWD" ; fi

somecommand이 시점에서도 이후에 종료 상태가 필요하면 어려움을 겪게 됩니다.


일반적으로 하위 쉘에서 명령을 실행하고 하위 쉘의 작업 디렉터리만 변경하는 것이 가장 좋습니다.

( cd "$workdir" && somecommand )

마지막 방법은 후속 명령에 대한 변수 설정과 같이 서브셸에서 수행할 수 없는 작업을 수행하지 않는 한 일반적으로 사용하고 권장하는 방법입니다.

관련 정보