파일을 가져와서 for 루프의 값을 사용하여(sed 사용) 수정하고 동일한 for 루프 중에 생성된 디렉터리로 리디렉션하려고 합니다.
원본 파일 > 디렉터리 생성 > 프로세스 파일(변경 사항 적용) > 출력을 디렉터리로 리디렉션
내 문제는 내 변수 값으로 디렉터리를 만드는 것입니다.
read NaMeoFFiLe
read startepsilonvalue
NaMeDiR="${startepsilonvalue}plus10steps"
mkdir "${NaMeDiR}"
for ((i=$stteps; i<=$lsteps; i+=1)); do
k=$(bc <<<"""scale=1; $i /10")
echo $k
mkdir "${NaMeDiR}/${k}"
ls "${NaMeDiR}"
sed -e '0,/epsilon = ./{//c\epsilon = '"$startepsilonvalue" -e '}' \
"${NaMeoFFiLe}" > "${k}_${NaMeiFFiLe}"
cat "${NaMeDiR}/${k}/${k}_${NaMeoFFiLe}" &
done
문제는 for 루프 외부에서 첫 번째 디렉터리를 생성할 수 있지만 for 루프 내부에서는 첫 번째와 마지막 디렉터리만 생성하고 sed 명령의 변경 사항을 수행하지 않는다는 것입니다.
내가 받는 오류는 내가 찾고 있는 디렉터리에 파일이 존재하지 않는다는 것입니다. 이는 디렉터리가 아직 생성되지 않았기 때문에 분명합니다.
내가 놓친 것이 있나요?
답변1
이 코드 조각에는 혼란을 야기할 수 있는 작은 것들이 많이 있는 것 같습니다.
첫째, 쓰여진 대로 때로는 디렉터리를 Unix의 숨겨진 디렉터리로 정의하는 점 (예 : ,, 등) $k
으로 시작할 수 있습니다 . 가장 먼저 확인하는 것은 이러한 디렉터리가 숨겨져 있는지 여부입니다..1
.2
ls -A
${k}_${NaMeiFFiLe}
둘째, 생성 중인 새 디렉터리가 아닌 상위 디렉터리에서 생성됩니다 . 또한 $k
점으로 시작하는 경우가 많기 때문에 상위 디렉터리에 숨겨져 있을 수도 있습니다. 코드 흐름을 고려하면 파일을 새 하위 디렉터리에 저장하려고 한다고 가정합니다. true인 경우 다음과 같습니다( ...
단순화를 위해 정규식을 다음으로 대체했습니다).
sed -e '...' "${NaMeoFFiLe}" > "${NaMeDiR}/${k}/${k}_${NaMeoFFiLe}"
참고로 하위 디렉터리를 포함한 전체 디렉터리 계층 구조를 생성하는 mkdir
옵션 플래그가 있습니다 -p
. 이는 외부 루프가 필요하지 않음을 의미합니다 mkdir
.
mkdir -p "${NaMeDiR}/${k}"
마지막으로, 좀 더 주관적인 측면에서, 코드 검토자가 읽기가 매우 어렵기 때문에 변수 이름을 대문자로 사용하는 방법을 다시 생각해볼 것을 제안합니다... 제 생각에는 다른 댓글 작성자가 더 나은 명명 규칙으로 피할 수 있는 잠재적인 오타를 식별한 것 같습니다.