매개변수 fileName을 취한 다음 해당 파일을 사용하여 채용 서버에 대한 컬 포스트 호출을 만드는 함수 A가 있습니다. 함수 의사 코드는 다음과 같습니다:
function A(filename)
{
// read file from local
// send it to deployment server and via curl/any rest client
// read response code
// store data of filename and response code
}
for all files f in folder :
A(f)
// See all response code and print data, which all files passed and which all failed
이제 병렬로 실행하려면 다음을 사용합니다.
A(f) & inside for loop
유닉스에서는 쉽게 사용할 수 있는 해시맵/사전 유형 지원이 없기 때문에 강조 표시된 부분, 파일 이름 수집 방법, 응답 코드 세부 정보가 걱정됩니다. 또한 A의 데이터를 인쇄하는 경우 파일 이름을 인쇄하는 라인과 응답 코드를 인쇄하는 라인을 유지하면 병렬 특성으로 인해 두 라인이 연속되지 않을 수 있습니다. 한 줄에 두 가지를 모두 인쇄할 수 있지만 나중에 일부 처리를 위해 결과를 캡처하고 싶습니다. 쉬운 방법이 있나요?
답변1
나는 다음을 사용할 것이다 parset
:
a() {
filename="$1"
echo "*** Here is ***"
sleep 0.$RANDOM
echo "the response code to"
sleep 0.$RANDOM
echo "$filename"
}
export -f a
# Put the results into a bash array. The order will be kept.
# Here we use "File a" and "File b" as input. Change those to your needs
parset res a ::: "File a" "File b"
echo "${res[0]}"
echo "${res[1]}"
또는:
# If you want the output into an assoc array, convert the results:
# First build an array of the input
input=("File a" "File b")
# Then run the jobs in parallel
parset res a ::: "${input[@]}"
# Finally zip the two arrays to a single associative array
declare -A myassoc
for ((i=0; $i<${#input[@]}; i++)); do
myassoc[${input[i]}]=${res[i]}
done
echo "${myassoc["File a"]}"
parset
GNU Parallel의 일부입니다.
활성화하려면 parset
기능으로 활성화해야 합니다. 이 기능은 의 일부로 정의됩니다 env_parallel
.
다음을 수행하고 쉘을 다시 시작하십시오.
bash: Put this in $HOME/.bashrc: . `which env_parallel.bash`
E.g. by doing: echo '. `which env_parallel.bash`' >> $HOME/.bashrc
Supports: aliases, functions, variables, arrays
zsh: Put this in $HOME/.zshrc: . `which env_parallel.zsh`
E.g. by doing: echo '. `which env_parallel.zsh`' >> $HOME/.zshenv
Supports: functions, variables, arrays
fish: Unsupported
ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays
mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh`
E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays
ash: Put this in $HOME/.profile: . `which env_parallel.ash`
E.g. by doing: echo '. `which env_parallel.ash`' >> $HOME/.profile
Supports: aliases, variables
dash: Put this in $HOME/.profile: . `which env_parallel.dash`
E.g. by doing: echo '. `which env_parallel.dash`' >> $HOME/.profile
Supports: aliases, variables
csh: Unsupported
tcsh: Unsupported
To install in all shells run:
parset --install