abc.sh
파일과 입력 소스( ) 가 있습니다 input.xyz
.
나는 항상 abc.sh
입력 소스(예: I input sh abc.sh input.xyz
)를 사용하여 파일을 실행하지만 디렉터리 수가 증가함에 따라 입력 파일 이름을 입력하기에는 너무 게으릅니다.
명령( )을 입력하는 대신 abc.sh 파일에 프로세스를 삽입하여 실행하는 방법은 무엇입니까 sh abc.sh input.xyz
?
현재 스크립트는 이렇습니다
INPUT=$1
n="1"
numb=$(sed -n "$n"p $1)
#echo $numb
dummy="NULL"
의견을 보내주셔서 감사합니다. 제 실수였습니다. 스크립트를 실행할 때 입력합니다.
sh abc.sh 000.xyz
실행할 때마다 000.xyz
숫자가 달라서 .xyz
그냥 고정되네요.
답변1
bash를 사용하면 디렉토리(예: 001.xyz, 002.xyz 등)에서 가능한 모든 입력 파일을 반복할 수 있습니다. 실행 중인 항목을 구성하기 위해 별도의 BASH 스크립트에 넣는 것이 더 쉬울 수 있습니다(예: 배치_run.sh).
예를 들어 루프를 사용하여 for
현재 디렉터리의 각 xyz 파일을 반복하고 abc.sh
해당 파일에 대해 스크립트를 실행할 수 있습니다.
for input_file in *.xyz
do
sh abc.sh $input_file
done
여러 개의 디렉토리가 있을 수 있다고 언급하셨습니다. 또한 와일드카드 문자(*)를 확장하여 디렉터리(현재 위치 기준)를 고려할 수도 있습니다.
for input_file in */*.xyz
do
sh abc.sh $input_file
done
스크립트를 입력 파일과 동일한 디렉터리에서 실행해야 하는 경우 cd
루프에서 다양한 작업을 수행할 수도 있습니다(예:).
# remember the original directory before the for loop
original_directory = $(pwd)
# loop through all valid directories containing xyz files
for input_file in */*.xyz
do
# enter the directory of containing the xyz file
cd $(dirname $input_file)
# run the script on the xyz file
sh abc.sh $(basename $input_file)
# return to the original directory
cd ${original_directory}
done
수행하려는 작업과 사양에 따라 다소 복잡해질 수 있지만 for
BASH 루프를 사용하여 명령을 자동으로 반복하는 방법에 대한 아이디어를 얻을 수 있기를 바랍니다.