-
Notifications
You must be signed in to change notification settings - Fork 3
Shellcheck Showcase #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
📝 WalkthroughWalkthroughA new shell script named Changes
Poem
Impact AnalysisNew shell script for greeting, listing .txt files, and echoing user inputℹ️ Low 🔄 Impacts behavior A new script, test.sh, allows users to print a greeting, list all .txt files in the current directory, and interactively echo back user input. This provides a simple utility for users to interact with files and receive feedback in the terminal. Test the script in directories with and without .txt files, and provide various user inputs (including empty input and special characters) to verify correct output and robustness. 🔍 Related Files
✨ Finishing Touches
🧪 Generate unit tests
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
shellcheck/test.sh (3)
5-5
: Quote variable expansion inecho
.Unquoted
$name
undergoes word-splitting and globbing. Quote it to print safely.-echo Hello $name +echo "Hello $name"
12-13
: Read input safely and provide a prompt.Use
read -r
to prevent backslash interpretation and prompt the user for clarity.-read input -echo You typed $input +read -r -p "Enter something: " input +echo "You typed: $input"
1-1
: Consider enabling strict-mode flags up front.Adding
set -euo pipefail
helps the script fail fast on errors or unset variables.-#!/bin/bash +#!/usr/bin/env bash +set -euo pipefail
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
shellcheck/test.sh
(1 hunks)
🧰 Additional context used
🪛 Shellcheck (0.10.0)
shellcheck/test.sh
[error] 7-7: Iterating over ls output is fragile. Use globs.
(SC2045)
for file in $(ls *.txt) | ||
do | ||
echo $file | ||
done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace the ls
-parsing loop with a robust glob loop.
for file in $(ls *.txt)
breaks on filenames with spaces or newlines and fails when no .txt
files exist. Glob expansion avoids both issues and keeps the code POSIX-friendly.
-for file in $(ls *.txt)
-do
- echo $file
-done
+for file in *.txt; do
+ # Skip the loop when no .txt files are present
+ [ -e "$file" ] || continue
+ echo "$file"
+done
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
for file in $(ls *.txt) | |
do | |
echo $file | |
done | |
for file in *.txt; do | |
# Skip the loop when no .txt files are present | |
[ -e "$file" ] || continue | |
echo "$file" | |
done |
🧰 Tools
🪛 Shellcheck (0.10.0)
[error] 7-7: Iterating over ls output is fragile. Use globs.
(SC2045)
🤖 Prompt for AI Agents
In shellcheck/test.sh around lines 7 to 10, replace the loop using `for file in
$(ls *.txt)` with a glob-based loop like `for file in *.txt` to handle filenames
with spaces or newlines correctly and avoid errors when no `.txt` files exist,
ensuring POSIX compatibility and robustness.
Summary by CodeRabbit
.txt
files in the current directory, and echoes back user input.