Bash cp
Copy a known source and verify the bytes before using the copy.
How it works
cp creates a copy of file contents, with metadata handling controlled by its options and platform. Decide how existing destinations are handled before running unattended work. An explicit existence check makes this small example refuse replacement, though it is not a concurrency-safe creation protocol. A production workflow with concurrent writers needs atomic creation or another coordinated policy.
Run the code
Reviewed with Git for Windows Bash 5.2.37. Open Git Bash, save the download with LF line endings in a separate learning folder, check it with bash -n lesson-name.sh, then run bash lesson-name.sh using the actual filename. Bash 4 or newer is required for the full course. Linux-only notes identify unavailable tools or POSIX behaviour. There is no Bash browser runner; Apache and MySQL are not required.
This complete example was executed in the stated local review environment.
The complete source creates a fresh private temporary workspace and checks its physical path before cleanup. All file fixtures belong to that workspace; do not remove the guards or point it at existing documents.
Example
#!/usr/bin/env bash
set -u
set -o pipefail
export LC_ALL=C
# Own a new directory; verify physical paths before cleanup.
parent=$(cd -- "${TMPDIR:-/tmp}" && pwd -P) || exit 1
work=$(mktemp -d "$parent/bhylu-bash.XXXXXX") || exit 1
work=$(cd -- "$work" && pwd -P) || exit 1
case "$work" in "$parent"/bhylu-bash.??????) ;; *) exit 1 ;; esac
cleanup() {
cd -- "$parent" || return 1
[[ -d $work && ! -L $work ]] || return 1
[[ $(cd -- "$work" && pwd -P) == "$work" ]] || return 1
case "$work" in "$parent"/bhylu-bash.??????) rm -r -- "$work" ;; *) return 1 ;; esac
}
trap cleanup EXIT
cd -- "$work" || exit 1
printf "desk revision 1\n" > source.txt
[[ ! -e copy.txt ]] || exit 1
cp -- source.txt copy.txt
cmp -- source.txt copy.txt || exit 1
printf "Copy matches source\n"
Focus on the lesson commands
This excerpt omits temporary-workspace setup and cleanup. Use the complete source above to run the example.
printf "desk revision 1\n" > source.txt
[[ ! -e copy.txt ]] || exit 1
cp -- source.txt copy.txt
cmp -- source.txt copy.txt || exit 1
printf "Copy matches source\n"
Expected result
Copy matches source
cmp compares the actual bytes rather than only file sizes. The original remains available, and the destination name is fixed inside the owned workspace. A copy’s successful exit status does not prove an external disk is durable or that all intended metadata was preserved. Verify the properties your use case actually requires.
Primary technical reference: Bash documentation.