Спасибо за редактирование.
Похоже, вы используете переменные оболочки и подстановку команд, чтобы указать имя файла и каталог, который вы хотите заархивировать.
Это сделает то, что вам нужно:
tar czfv $HOME'/Pictures_'$CREATION_TIMESTAMP'.tar.gz' "$DEST" -C Pictures
Я добавил v
, чтобы сделать его подробным, чтобы вы могли видеть, что происходит. Переменная $HOME
, очевидно, расширяется до вашего домашнего каталога, и я полагаю, что $CREATION _TIMESTAMP является переменной для времени. Вы заявили, что $DEST
указывает путь к каталогу, который вы пытаетесь заархивировать, поэтому он находится в конце, где он обычно находится. Я помещаю двойные кавычки вокруг $DEST
на случай, если путь содержит пробелы, но если это не так, вы можете удалить их. Если $CREATION _TIMESTAMP равно тому, что у вас есть выше $(date +%F_%H%M%S)
, тогда в нем не будет пробелов, поэтому двойные кавычки не нужны. -C
удаляет вложенность, так что сжимается только Pictures
.
Если вывод соответствует вашим ожиданиям, т. е. без отступа, все значения заключаются в одинарные кавычки и всегда ставится пробел перед а после =
я бы, наверное, внес эти небольшие изменения:
read
(с -p
, если поддерживается )для всех переменных. Легче редактировать все значения сразу (через пробел/табуляцию ). sed
звонок, уже упомянутый в предыдущем ответе.*
на ^[[:blank:]]*
, чтобы совпадать только с пробелами или символами табуляции в начале строки read -p "Please enter mass, Teff, L, X, Z, directory number: " mass teff l x z d_number
sed -i \
-e "s/^[[:blank:]]*\(RSP_mass\).*/\1 = '$mass'/i" \
-e "s/^[[:blank:]]*\(RSP_Teff\).*/\1 = '$teff'/i" \
-e "s/^[[:blank:]]*\(RSP_L\).*/\1 = '$l'/i" \
-e "s/^[[:blank:]]*\(RSP_X\).*/\1 = '$x'/i" \
-e "s/^[[:blank:]]*\(RSP_Z\).*/\1 = '$z'/i" \
-e "s/^[[:blank:]]*\(log_directory\).*/\1 = 'LOGS_$d_number'/i" \
-e "s/^[[:blank:]]*\(photo_directory\).*/\1 = 'photos_$d_number'/i" \
"$MESA_INLIST"
Я не думаю, что вы хотите заключать в одинарные кавычки любые замещающие переменные, кроме «LOGS _$d _number» и «photos _$d _number». Остальные переменные кажутся числами, и заключение их в одинарные кавычки, вероятно, превратит их в строки, что в лучшем случае снизит скорость ваших вычислений или (в зависимости от используемого вами языка )вызывают несоответствие типов переменных. Я предполагаю, что цель индекса '...d0' состоит в том, чтобы заставить значения быть двойными с плавающей запятой.
В зависимости от того, что именно вы делаете :Вместо того, чтобы читать переменные в качестве входных данных после запуска скрипта, вы можете просто указать их как параметры в командной строке...
the_script 4.2d1 5000 1300d0.5d0.001d0 3
Тогда ваш скрипт (с именем '_script', в данном случае ), запустится:
mass="$1"
teff="$2"
l="$3"
x="$4"
z="$5"
d_number="$6"
# Simple error checking
if [[ $# -lt 6 ]] ; then
# print message to stderr with >&2 rather than standard output
# $0 is the script filename
echo "$0 : too few variables on the command line. We wanted 6 but got $#." >&2
exit 2
fi
Вы также можете указать "MESA _INLIST" как параметр командной строки, а не как экспортируемую переменную.