Bash-скрипт для создания скрипта со встроенными значениями

Запустите это. % заставляет bash удалить совпадение подстановки в обратном порядке.

for F in *.csv.new; do
  touch ${F%.csv.new}.err
done

Если у вас есть файлы

file1_test.csv.new
file2_test.csv.new

, вы получите

file1_test.err
file2_test.err
2
17.08.2017, 11:44
2 ответа

Как насчет того, чтобы отключить подстановку параметров в документе здесь -? (См. Пример 19 -7 на сайте www.tldp.org для получения дополнительной информации.)

Возможно, ваш скрипт будет выглядеть лучше, (хотя он все еще довольно плотный):

su "$uname" -c "cat > ~/scripts/syncdownloads.sh << 'ENDMASTER'
###### Using `$()` to create a sub shell so that we don't have to escape 
###### special characters.
$(
###### The parameter substitution is on here
cat <<INNERMASTER
#!/bin/bash
login="$flogin"
pass="$fpass"
host="$fhost"
remote_dir="$fremote_dir"
local_dir="$flocal_dir"

INNERMASTER

###### No parameter substitution
cat <<'INNERMASTER'
base_name="$(basename "$0")"
lock_file="/tmp/$base_name.lock"
trap "rm -f $lock_file exit 0" SIGINT SIGTERM
if [ -e "$lock_file" ]
then
    echo "$base_name is running already."
    exit
else
    touch "$lock_file"
    lftp -p 22 -u "$login","$pass" sftp://"$host" << EOF
    set sftp:auto-confirm yes
    set mirror:use-pget-n 5
    mirror -c -P5 "$remote_dir" "$local_dir"
    quit
    EOF
    rm -f "$lock_file"
    trap - SIGINT SIGTERM
    exit
fi

INNERMASTER
)
ENDMASTER"

Таким образом, вам не придется ни от чего убегать.

4
27.01.2020, 21:53

Ставьте перед знаком доллара обратную косую черту:

lock_file="/tmp/\$base_name.lock"

и так далее.

2
27.01.2020, 21:53

Теги

Похожие вопросы