Skip to content

London |26-JUL-SDC |Shaghayeghfar| Sprint 3 |Implement Shell Tools#593

Open
shaghayeghfar wants to merge 3 commits into
CodeYourFuture:mainfrom
shaghayeghfar:implement-shell-tools
Open

London |26-JUL-SDC |Shaghayeghfar| Sprint 3 |Implement Shell Tools#593
shaghayeghfar wants to merge 3 commits into
CodeYourFuture:mainfrom
shaghayeghfar:implement-shell-tools

Conversation

@shaghayeghfar

Copy link
Copy Markdown

Learners, PR Template

Self checklist

  • I have titled my PR with Region | Cohort | FirstName LastName | Sprint | Assignment Title
  • My changes meet the requirements of the task
  • I have tested my changes
  • My changes follow the style guide

Changelist

Implemented simplified versions of common Unix shell commands using JavaScript and Node.js

@shaghayeghfar shaghayeghfar added 📅 Sprint 3 Assigned during Sprint 3 of this module Needs Review Trainee to add when requesting review. PRs without this label will not be reviewed. labels Jul 22, 2026

@SlideGauge SlideGauge left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good job, I've got several notes from me, could you address them please?

Comment thread implement-shell-tools/ls/ls.js Outdated
} else if (args[i] === "-a") {
showHidden = true;
} else {
path = args[i];

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When you run ls sample-files/*, the shell passes many paths as separate arguments. Each loop does path = args[i] - after the loop, how many of those paths are left? What does the real ls show for a glob like that, and how could you keep all of them rather than just one?

Comment thread implement-shell-tools/wc/wc.js Outdated
// Run wc for every file

for (let file of files) {
countFile(file);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Try the real wc sample-files/* with several files — what appears on the last line that your output doesn't have yet? Where in this loop could you accumulate the counts to produce that?

Comment thread implement-shell-tools/wc/wc.js Outdated

// Function to count one file
function countFile(fileName) {
const content = fs.readFileSync(fileName, "utf8");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cat.js wraps its readFileSync in try/catch, but this one doesn't - and sample-files/* includes the dir subdirectory. What happens when readFileSync is handed a directory, and what does that do to the files listed after it?

Comment thread implement-shell-tools/cat/cat.js Outdated
try {
let content = fs.readFileSync(fileName, "utf8");

let lines = content.split("\n");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If a file ends in \n, what's the last element of content.split("\n")? Combined with console.log adding its own newline (line 42), how does your output compare to cat sample-files/1.txt - same number of lines, or one extra?

Comment thread implement-shell-tools/ls/ls.js Outdated
if (fs.statSync(path).isFile()) {
console.log(path);
} else {
let files = fs.readdirSync(path);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

readdirSync returns entries in whatever order the filesystem gives. Does the real ls do the same, or does it guarantee a particular order? What one call would make yours match?

Comment thread implement-shell-tools/cat/cat.js Outdated
let lineNumber = 1;

// Check for flags
if (args[0] === "-n") {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Flags are only checked at args[0]. That covers the required command lines - but ask yourself: what would happen with -n file1 file2, or a flag that isn't first?

Comment thread implement-shell-tools/wc/wc.js Outdated
let lines = content.split("\n").length - 1;

let words = content
.trim()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice — trim().split(/\s+/).filter(...) correctly returns 0 words for an empty file, an edge case that trips a lot of people up.

@SlideGauge SlideGauge added Reviewed Volunteer to add when completing a review with trainee action still to take. and removed Needs Review Trainee to add when requesting review. PRs without this label will not be reviewed. labels Jul 23, 2026
@shaghayeghfar

Copy link
Copy Markdown
Author

Dear @SlideGauge

Thank you very much for all your help, feedback, and the time you have taken to review my work. I really appreciate it. Thank you again for your support and guidance!

@shaghayeghfar shaghayeghfar added Needs Review Trainee to add when requesting review. PRs without this label will not be reviewed. and removed Reviewed Volunteer to add when completing a review with trainee action still to take. labels Jul 24, 2026
@SlideGauge

Copy link
Copy Markdown

Good job, review complete!

@SlideGauge SlideGauge added Complete Volunteer to add when work is complete and all review comments have been addressed. and removed Needs Review Trainee to add when requesting review. PRs without this label will not be reviewed. labels Jul 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Complete Volunteer to add when work is complete and all review comments have been addressed. 📅 Sprint 3 Assigned during Sprint 3 of this module

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants