![파일의 경로 이름을 한 줄씩 읽고 각 경로 이름에 Pushd를 적용하려면 어떻게 해야 합니까? [복사]](https://linux55.com/image/125405/%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EA%B2%BD%EB%A1%9C%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%ED%95%9C%20%EC%A4%84%EC%94%A9%20%EC%9D%BD%EA%B3%A0%20%EA%B0%81%20%EA%B2%BD%EB%A1%9C%20%EC%9D%B4%EB%A6%84%EC%97%90%20Pushd%EB%A5%BC%20%EC%A0%81%EC%9A%A9%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
/tmp/pathnames
각 줄이 디렉터리의 경로 이름인 파일이 있습니다 .
/tmp/my dir1
/tmp/dir2
/tmp/dir3
pushd
현재 쉘의 디렉토리 스택에서 해당 경로 이름을 가질 수 있도록 파일의 모든 행에 이 명령을 적용하고 싶습니다 .
이 목적을 위한 bash 스크립트는 다음과 같습니다.
#! /bin/bash
cat /tmp/pathnames | while read pathname; do
pushd "$pathname"
done
하지만 예상대로 작동하지 않습니다. 즉, 현재 쉘에 대해 디렉터리 스택이 생성되지 않습니다.
쉘에서 직접 스크립트의 명령을 실행해도 source
여전히 작동하지 않습니다.
이 문제의 이유와 해결 방법을 알고 싶습니다.
감사해요.
답변1
이것은 본질적으로 같은 질문입니다while 루프 후에 배열이 비어 있는 이유는 무엇입니까?즉, (좋든 source
싫든) pushd
다른 하위 쉘에서 발생합니다.
비교됨
$ cat pathnames | while read pathname; do pushd "$pathname"; dirs -v; done
/tmp/my dir1 ~
0 /tmp/my dir1
1 ~
/tmp/dir2 /tmp/my dir1 ~
0 /tmp/dir2
1 /tmp/my dir1
2 ~
/tmp/dir3 /tmp/dir2 /tmp/my dir1 ~
0 /tmp/dir3
1 /tmp/dir2
2 /tmp/my dir1
3 ~
$
$ dirs -v
0 ~
그리고
$ while read pathname; do pushd "$pathname"; dirs -v; done < pathnames
/tmp/my dir1 ~
0 /tmp/my dir1
1 ~
/tmp/dir2 /tmp/my dir1 ~
0 /tmp/dir2
1 /tmp/my dir1
2 ~
/tmp/dir3 /tmp/dir2 /tmp/my dir1 ~
0 /tmp/dir3
1 /tmp/dir2
2 /tmp/my dir1
3 ~
$
$ dirs -v
0 /tmp/dir3
1 /tmp/dir2
2 /tmp/my dir1
3 ~
$