나는 해당 경로 아래에 일부 스크립트를 가져오기 위해 이 문서를 작성했지만, ~/own_scripts/
작성한 방식으로 인해 해당 경로가 중복되었습니다.
source <<-EOF
~/own_scripts/1.sh
~/own_scripts/2.sh
# More scripts under ~/own_scripts;
EOF
경로를 사용하여 변수를 설정한 다음 설정을 해제하는 것은 괜찮지만 여전히 중복이 발생합니다.
여기 문서에서 이러한 source
(또는 ) 경로 중복을 피하는 가장 좋은 방법은 무엇입니까?bash
답변1
여기서 문서는 단지 문서일 뿐입니다. 이 문서의 스크립트는 바로 스크립트입니다.
스크립트는 다음과 같이 작성할 수 있습니다.
cd "$HOME/own_scripts" || exit 1
./1.sh
./2.sh
또는 호출하려는 모든 스크립트의 호출 n.sh
범위가 n
1~30인 경우:
cd "$HOME/own_scripts" || exit 1
for (( i = 1; i <= 30; ++i )); do
[ -x "${i}.sh" ] && ./${i}.sh
done
그건,
source <<-'END_SCRIPT'
cd "$HOME/own_scripts" || exit 1
for (( i = 1; i <= 30; ++i )); do
[ -x "${i}.sh" ] && ./${i}.sh
done
END_SCRIPT
실제로 여기에 있는 문서는 이제 짧기 때문에 다시 삭제할 수 있습니다 cd
.
source <<-'END_SCRIPT'
for (( i = 1; i <= 30; ++i )); do
[ -x "$HOME/own_scripts/${i}.sh" ] && "$HOME/own_scripts/${i}.sh"
done
END_SCRIPT
표준 입력에서 읽지 않을 뿐이므로 source
여기에서 문서 소싱이 시작되지 않습니다.
대신 다음과 같은 것을 사용하십시오.
bash <<-'END_SCRIPT'
...as above...
END_SCRIPT
( bash
이것이 스크립트를 실행하려는 쉘인 경우).
'END_SCRIPT'
여기서 문서를 시작하는 데 익숙합니다 . 인용하면 현재 쉘이 문서의 변수를 확장하는 것을 방지하고 더 자세한 마크업이 독자를 위한 문서로 사용됩니다.물결표 이후로
$HOME
대신 사용했습니다.~
변수처럼 동작하지 않습니다더 자세한 내용은$HOME
스크립트 내 문서화에 더 적합합니다.여기에 있는 문서의 스크립트는
cd
디렉터리를 해당$HOME/onw_script
디렉터리로 변경하는 데만 사용됩니다. 실패하면 쉘 세션이 종료됩니다.for
-loop (셸에서 작동bash
) 을 사용한 예에서는ksh
루프에서 실행될 스크립트의 이름을 생성합니다. 또한 테스트를 사용하여 실행을 시도하기 전에-x
해당 이름을 가진 실행 파일이 실제로 존재하는지 테스트합니다 .