Before overwriting a file, a script can compute the backup name and report the copy plan. The visible plan is easier to review than a hidden write.

Program

Play the script to choose the filename and see the backup plan.

filename
backup_name_plan.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash

filename="config.yml"
backup="$filename.bak"
plan="copy $filename $backup"
echo "$plan"
#!/usr/bin/env bash

filename="secrets.env"
backup="$filename.bak"
plan="copy $filename $backup"
echo "$plan"
  1. filename ← config.yml

    3filename="config.yml"4backup="$filename.bak"
    values this stepconfig.ymlfilename
  2. backup ← config.yml.bak

    3filename="config.yml"4backup="$filename.bak"5plan="copy $filename $backup"
    values this stepconfig.yml.bakbackupconfig.ymlfilename
  3. plan ← copy config.yml config.yml.bak

    4backup="$filename.bak"5plan="copy $filename $backup"6echo "$plan"
    values this stepcopy config.yml config.yml.bakplanconfig.ymlfilenameconfig.yml.bakbackup
  4. echo "$plan"

    5plan="copy $filename $backup"6echo "$plan"
    outputcopy config.yml config.yml.bak
    values this stepcopy config.yml config.yml.bakplan
  1. filename ← secrets.env

    3filename="secrets.env"4backup="$filename.bak"
    values this stepsecrets.envfilename
  2. backup ← secrets.env.bak

    3filename="secrets.env"4backup="$filename.bak"5plan="copy $filename $backup"
    values this stepsecrets.env.bakbackupsecrets.envfilename
  3. plan ← copy secrets.env secrets.env.bak

    4backup="$filename.bak"5plan="copy $filename $backup"6echo "$plan"
    values this stepcopy secrets.env secrets.env.bakplansecrets.envfilenamesecrets.env.bakbackup
  4. echo "$plan"

    5plan="copy $filename $backup"6echo "$plan"
    outputcopy secrets.env secrets.env.bak
    values this stepcopy secrets.env secrets.env.bakplan
backup A backup preserves the old file before a risky write.
plan Printing the plan makes the operation reviewable before execution.
suffix A predictable suffix keeps backup names easy to find.