SShortSingh.
Back to feed

Atomic File Writes in Bash: How a Temp File and EXIT Trap Prevent Silent Data Corruption

0
·16 views

A software developer demonstrated a Bash scripting pattern that prevents consumers from reading incomplete output files when a script is interrupted mid-execution. The approach uses mktemp to write data to a temporary file first, then atomically moves it to the final destination only on successful completion. An EXIT trap ensures the temporary file is deleted if the script is killed by a signal, fails due to set -e, or exits normally, leaving the previously published file intact. Testing on Bash 5.3.9 confirmed that sending SIGTERM mid-run preserved the last complete output while cleanly removing the partial temp file. The developer also highlighted a critical ordering bug in the cleanup handler: capturing the exit code must be the very first line, as running even a successful rm beforehand will overwrite the status with zero, causing monitoring tools to report false success.

Read the full story at DEV Community

This is an AI-generated summary. ShortSingh links to the original source for the complete article.

Discussion (0)

Log in to join the discussion and vote.

Log in

Related stories

0
ProgrammingDEV Community ·

Chinese developer seeks legitimate way to keep paying for Claude amid regional access limits

A 22-year-old developer in mainland China says Claude, especially Claude Code, is central to his coding and open-source work, including Minecraft mods. He has worked around networking barriers but still struggles to pay for a subscription because of regional restrictions. He acknowledges Anthropic's compliance and security reasons for those limits and says he is not asking anyone to bypass them. He is looking for developers in supported regions who might know a lawful arrangement, offering to cover costs and share server resources in return, while recognizing the privacy and trust concerns involved. He also invites advice and simply wants to connect with fellow developers.

0
ProgrammingDEV Community ·

How Image File Signatures Like PNG, JPEG, WebP and AVIF Identify Formats

The article argues that a file's actual byte content is more reliable than its extension or declared MIME type for identifying an image format. Every common image container starts with a fixed byte pattern at a known offset, such as FF D8 FF for JPEG or 89 50 4E 47 for PNG. PNG's signature includes CRLF and DOS end-of-file bytes so that text-mode transfers corrupt it visibly. AVIF, HEIC and HEIF share the same ISO base media container and are told apart only by the brand code at offset 8. The piece also shows a short JavaScript check that identifies common formats from the first twelve decoded bytes, while noting that a signature confirms only the container type, not that the file is complete.

0
ProgrammingDEV Community ·

Checklist for Hardening AI Agents Before 2027 Launches

This one-page template helps teams define an AI agent project before building begins. It asks them to describe the task in a sentence, name business and technical owners plus a week-one reviewer, and classify each action by risk level. It also calls for listing data sources and sensitive fields, documenting where the agent runs, and recording baseline metrics with saved test cases. Finally, it requires a clear pause threshold, someone authorized to pause, and a date for the first review.

0
ProgrammingDEV Community ·

A Personal AI Agent Built as a Folder of Markdown Files

A developer describes a personal AI agent that consists simply of a folder of Markdown files worked on by a coding agent, with no dedicated app or server. The system handles tasks such as workout planning, nutrition and protein tracking, spending logs against a budget, and voice-input journaling. The folder is organized into daily records, a Luhmann-style knowledge wiki with source links, a profile about the owner, and per-person files to avoid transcription errors with names. Additional modules such as fitness, writing and gaming are added as needed, and the folder can be opened directly in Obsidian for reading.