@@ -475,7 +475,7 @@ if [[ -n "${E4S_CL_LAUNCHER_ARGS}" ]]; then
475475 LAUNCHER_ARGS+=(" ${EXTRA_LAUNCHER_ARGS[@]} " )
476476fi
477477
478- HOST_MPI_VERSION=" $( ${HOST_MPIRUN} --version 2> /dev/null | head -n 2 || true) "
478+ HOST_MPI_VERSION=" $( " ${HOST_MPIRUN} " --version 2> /dev/null | head -n 2 || true) "
479479HOST_MPI_FAMILY=" $( detect_mpi_family " ${HOST_MPI_VERSION} " ) "
480480log " Detected host MPI family: ${HOST_MPI_FAMILY:- unknown} "
481481
@@ -545,10 +545,10 @@ OSU_CHECKSUM_FILE="${E4S_CL_CACHE_DIR}/osu.sha256"
545545NEED_DOWNLOAD=" 0"
546546if [[ ! -f " ${OSU_TARBALL} " || ! -f " ${OSU_META_FILE} " ]]; then
547547 NEED_DOWNLOAD=" 1"
548- rm -rf " ${OSU_SRC_DIR} "
548+ [[ -n " ${OSU_SRC_DIR} " ]] && rm -rf " ${OSU_SRC_DIR} "
549549elif ! grep -Fq " osu_url=${E4S_CL_OSU_URL} " " ${OSU_META_FILE} " ; then
550550 NEED_DOWNLOAD=" 1"
551- rm -rf " ${OSU_SRC_DIR} "
551+ [[ -n " ${OSU_SRC_DIR} " ]] && rm -rf " ${OSU_SRC_DIR} "
552552fi
553553
554554if [[ " ${NEED_DOWNLOAD} " == " 1" ]]; then
626626
627627if [[ " ${REBUILD_HOST_OSU} " == " 1" ]]; then
628628 log " (Re)building host OSU benchmarks"
629- rm -rf " ${OSU_HOST_PREFIX} "
629+ [[ -n " ${OSU_HOST_PREFIX} " ]] && rm -rf " ${OSU_HOST_PREFIX} "
630630 mkdir -p " ${OSU_HOST_PREFIX} "
631631 (
632632 # Clear CFLAGS/CXXFLAGS to avoid injecting incompatible compiler flags
707707 if [[ -z " ${E4S_CL_APPTAINER_BUILD_ARGS} " ]]; then
708708 E4S_CL_APPTAINER_BUILD_ARGS=" --fakeroot"
709709 fi
710- run_silent ${CONTAINER_CMD} build ${E4S_CL_APPTAINER_BUILD_ARGS} " ${E4S_CL_IMAGE} " " ${E4S_CL_IMAGE_DEF} "
710+ # Note: E4S_CL_APPTAINER_BUILD_ARGS intentionally unquoted to allow word-splitting for multiple flags
711+ run_silent " ${CONTAINER_CMD} " build ${E4S_CL_APPTAINER_BUILD_ARGS} " ${E4S_CL_IMAGE} " " ${E4S_CL_IMAGE_DEF} "
711712 fi
712713fi
713714
@@ -716,9 +717,9 @@ if [[ "${E4S_CL_IMAGE}" != docker://* && "${E4S_CL_IMAGE}" != library://* ]]; th
716717 [[ -f " ${E4S_CL_IMAGE} " ]] || fail " E4S_CL_IMAGE not found: ${E4S_CL_IMAGE} "
717718fi
718719
719- CONTAINER_MPI_VERSION=" $( ${CONTAINER_CMD} exec " ${E4S_CL_IMAGE} " mpirun --version 2> /dev/null | head -n 2 || true) "
720+ CONTAINER_MPI_VERSION=" $( " ${CONTAINER_CMD} " exec " ${E4S_CL_IMAGE} " mpirun --version 2> /dev/null | head -n 2 || true) "
720721if [[ -z " $( detect_mpi_family " ${CONTAINER_MPI_VERSION} " ) " ]]; then
721- CONTAINER_MPI_VERSION+=$' \n ' " $( ${CONTAINER_CMD} exec " ${E4S_CL_IMAGE} " mpichversion 2> /dev/null | head -n 2 || true) "
722+ CONTAINER_MPI_VERSION+=$' \n ' " $( " ${CONTAINER_CMD} " exec " ${E4S_CL_IMAGE} " mpichversion 2> /dev/null | head -n 2 || true) "
722723fi
723724CONTAINER_MPI_FAMILY=" $( detect_mpi_family " ${CONTAINER_MPI_VERSION} " ) "
724725
@@ -774,7 +775,7 @@ run "${E4S_CL_BIN}" profile select "${E4S_CL_PROFILE_NAME}"
774775# This mirrors how a user would re-run detection when the profile isn't populated.
775776profile_has_bindings () {
776777 local output
777- output=" $( ${E4S_CL_BIN} profile show) "
778+ output=" $( " ${E4S_CL_BIN} " profile show) "
778779 if echo " ${output} " | awk ' /^Bound libraries:/{inlib=1; next} /^Bound files:/{inlib=0} inlib && /^ - /{print}' | grep -q . ; then
779780 return 0
780781 fi
821822
822823if [[ " ${REBUILD_CONT_OSU} " == " 1" ]]; then
823824 log " (Re)building container OSU benchmarks"
824- rm -rf " ${OSU_CONT_PREFIX} "
825+ [[ -n " ${OSU_CONT_PREFIX} " ]] && rm -rf " ${OSU_CONT_PREFIX} "
825826 mkdir -p " ${OSU_CONT_PREFIX} "
826827 run_silent " ${CONTAINER_CMD} " exec -B " ${E4S_CL_WORKDIR} :/work" -B " ${E4S_CL_CACHE_DIR} :/cache" " ${E4S_CL_IMAGE} " bash -lc " \
827828 set -euo pipefail; \
@@ -861,9 +862,9 @@ if [[ "${E4S_CL_RUN_CONTAINER_BASELINE}" == "1" ]]; then
861862 for bench in " ${OSU_BENCHES[@]} " ; do
862863 bench_name=" $( basename " ${bench} " ) "
863864 out_file=" ${E4S_CL_WORKDIR} /container_${bench_name} .txt"
864- run_timed " container_ ${bench_name} " ${CONTAINER_CMD} exec -B " ${E4S_CL_WORKDIR} :/work " " ${E4S_CL_IMAGE} " bash -lc " \
865- mpirun -np ${E4S_CL_MPI_PROCS} /work/osu-container/libexec/osu-micro-benchmarks/mpi/${bench} ${OSU_ARGS[*]} \
866- " | tee " ${out_file} "
865+ # Build command array to avoid injection via bash -lc string interpolation
866+ mpi_cmd=( mpirun -np " ${E4S_CL_MPI_PROCS} " " /work/osu-container/libexec/osu-micro-benchmarks/mpi/${bench} " " ${OSU_ARGS[@]} " )
867+ run_timed " container_ ${bench_name} " " ${CONTAINER_CMD} " exec -B " ${E4S_CL_WORKDIR} :/work " " ${E4S_CL_IMAGE} " bash -lc " $( printf ' %q ' " ${mpi_cmd[@]} " ) " | tee " ${out_file} "
867868 done
868869fi
869870
0 commit comments