bhylu.com

Advertisements

Bash ls

Inspect known files without treating formatted listings as a data format.

How it works

ls is useful for a person inspecting a directory. Its display depends on options, terminal width, locale and filename characters. A script that needs filenames should use a glob or a null-delimited producer rather than parsing a decorative listing. Include hidden files deliberately when they belong to the task; ordinary star expansion does not select them by default.

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.

Download complete source

Example

ls.sh

#!/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

touch -- north.txt south.txt .desk-note
ls -1 -- north.txt south.txt
[[ -f .desk-note ]] || exit 1

Focus on the lesson commands

This excerpt omits temporary-workspace setup and cleanup. Use the complete source above to run the example.

Command excerpt

touch -- north.txt south.txt .desk-note
ls -1 -- north.txt south.txt
[[ -f .desk-note ]] || exit 1

Expected result

north.txt
south.txt

The output is predictable because two exact filenames are supplied and the locale is fixed in the lab wrapper. The hidden note exists but is not included in this explicit listing. This distinction helps explain why the files a person sees and the files a script processes can differ.

Primary technical reference: Bash documentation.