В минимальной оболочке POSIX, которая не поддерживает массивы, вы можете просто манипулировать списком позиционных аргументов с помощью команды set
. Непосредственно перед циклом for
вы можете сделать
if [ -z "$2" ]; then
set -- --noise "$1" --snr 25 --iterations 1250
else
set -- --noise "$1" --snr 25 --iterations 1250 --enhancement "$2"
fi
и теперь запустите цикл for как
for snr in 0 5 10 15 20 25; do
python evaluate.py "$@"
done
Если ваша оболочка поддерживает повторную оболочку массива bash
, zsh
или другую, вы можете просто использовать массив
argv=(--noise "$1" --snr 25 --iterations 1250)
if [ ! -z "$2" ]; then
argv+=( --enhancement "$2" )
fi
и теперь вызовите скрипт как
python evaluate.py "${argv[@]}"
Как указано в комментариях, вы не используете фактическое значение значения snr
из цикла for. Используйте значение как $snr
, где это применимо в аргументах скрипта, и в этом случае вам может понадобиться переместить логику построения списка аргументов внутрь цикла.
Если у вас есть корни имени файла во внешнем файле, вы можете использовать цикл bash для перебора его содержимого:
#!/bin/bash
shopt -s nullglob
sourcedir=/home/scrivania/pdb_files
targetdir=/home/scrivania/news/
while IFS= read -r froot
do
for file in "$sourcedir/$froot"*.pdb
do
cp "$file" "$targetdir/$froot.pdb"
done
done < list.txt
.pdb
. Поскольку вы заявили, что в исходном каталоге есть только один такой файл, этот внутренний цикл for
будет служить для выделения (неизвестного )точного имени файла из шаблона в list.txt
. shopt -s nullglob
гарантирует, что в (маловероятном )случае такого файла не существует, цикл не наткнется на него. for
сценарий копирует файл в целевой каталог. В текущем виде он переименовывает файлы при копировании указанным вами способом. Если это не то, что вы хотите, измените строку на cp "$file" "$targetdir"
и сделайте переименование во втором скрипте. for
и заменить его на cp "$sourcedir/$froot"*.pdb "$targetdir/$froot.pdb"
#!/bin/bash input="files.txt" while IFS= read -r line do /bin/cp "${line}_A.pdb" "/home/scrivania/news/${line}.pdb" done
Должен сделать это.
#!/usr/bin/sh
for XXX in $(cat list.txt)
do
cp /tmp/home/scrivania/pdb_files/${XXX}*.pdb /tmp/home/scrivania/news/$XXX.pdb
done