Bash rm
Remove one exact disposable file and prove that a neighbour survives.
How it works
rm removes directory entries; it is not a recycle-bin operation or a guaranteed secure erasure mechanism. Quote the filename and separate it from options with --. This exercise removes only a file created by the same listing inside a verified private workspace. Recursive removal requires an explicit ownership and path boundary, not merely a variable that happens to be nonempty.
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 "temporary\n" > ./-draft.txt
printf "keep\n" > keep.txt
rm -- ./-draft.txt
[[ ! -e ./-draft.txt && -f keep.txt ]] || exit 1
printf "Only the exact disposable draft removed\n"
Focus on the lesson commands
This excerpt omits temporary-workspace setup and cleanup. Use the complete source above to run the example.
printf "temporary\n" > ./-draft.txt
printf "keep\n" > keep.txt
rm -- ./-draft.txt
[[ ! -e ./-draft.txt && -f keep.txt ]] || exit 1
printf "Only the exact disposable draft removed\n"
Expected result
Only the exact disposable draft removed
The leading dash in the disposable name demonstrates why option separation matters. keep.txt acts as a neighbour sentinel. The shared workspace cleanup is separately guarded to its generated temporary directory. No learner document, application file or external directory is selected by this lesson.
Primary technical reference: Bash documentation.