Разница между mkdir и mktemp внутри скрипта
Когда я использую mkdir для создания каталога с именем WORKDIR в cwd, отлично работает следующий способ:
#!/bin/bash
SUBDIR=$(pwd)
export BASISDIR="/home/Basis_Sets"
for i in *.ZMAT; do
[ -f "$i" ] || break
BASENAME=$(basename $i .ZMAT)
ZMAT_file=$BASENAME.ZMAT
FCMINT_file=$BASENAME.FCMINT
ERROR_file=$BASENAME.slu
mkdir $SUBDIR/$BASENAME
export WORKDIR="$SUBDIR/$BASENAME"
if [[ ! -f $ERROR_file ]] && [[ -d $WORKDIR ]]; then
cp $BASENAME.* $WORKDIR
cp $BASISDIR/GENBAS $WORKDIR
cp _CFOUR_SLURM.SUB $WORKDIR
cd $WORKDIR
RUN_COMMAND="sbatch -J $BASENAME _CFOUR_SLURM.SUB"
eval $RUN_COMMAND
mv $ZMAT_file ZMAT
mv $FCMINT_file FCMINT
file_count=$(ls -x *)
echo "File Count: $file_count"
cd $SUBDIR
sleep 10
else
echo "$BASENAME Error File Exists - Not Submitting Job"
fi
done
Однако, когда я использую его следующим образом, он не может идентифицировать WORKDIR, но каталог все еще создается (т.е. оператор if не работает, но каталог создается). Я использовал этот идентичный метод в другом скрипте для создания временного каталога [то есть: NAME = $(mktemp -d ....)], и он отлично работает. Почему приведенный ниже код работает для mktemp, но не для mkdir?
#!/bin/bash
SUBDIR=$(pwd)
export BASISDIR="/home/Basis_Sets"
for i in *.ZMAT; do
[ -f "$i" ] || break
BASENAME=$(basename $i .ZMAT)
ZMAT_file=$BASENAME.ZMAT
FCMINT_file=$BASENAME.FCMINT
ERROR_file=$BASENAME.slu
WORKDIR=$(mkdir $SUBDIR/$BASENAME)
if [[ ! -f $ERROR_file ]] && [[ -d $WORKDIR ]]; then
cp $BASENAME.* $WORKDIR
cp $BASISDIR/GENBAS $WORKDIR
cp _CFOUR_SLURM.SUB $WORKDIR
cd $WORKDIR
RUN_COMMAND="sbatch -J $BASENAME _CFOUR_SLURM.SUB"
eval $RUN_COMMAND
mv $ZMAT_file ZMAT
mv $FCMINT_file FCMINT
file_count=$(ls -x *)
echo "File Count: $file_count"
cd $SUBDIR
sleep 10
else
echo "$BASENAME Error File Exists - Not Submitting Job"
fi
done
1 ответ
не выводит имя созданного каталога;
mktemp -d
делает. С
mkdir
ничего не печатает, $WORKDIR устанавливается в пустую строку.