Shell & Bash Errors
Command not found, permissions, quoting, expansion and Makefile syntax.
Understanding Shell errors
Shell errors are usually about PATH, permissions, or quoting and expansion. The quoting class is the most damaging because it fails silently: an unquoted variable containing a space becomes two arguments, and an empty one disappears entirely. Running shellcheck over any script longer than a few lines catches most of these before they run.
How to debug Shell errors
- Trace execution with
bash -x script.shto see each command after expansion. This makes quoting bugs immediately visible. - Start every script with
set -euo pipefailso failures stop the script instead of cascading. - Quote every variable expansion:
"$var","${arr[@]}". This single habit prevents the majority of shell bugs. - Use
command -v footo check whether something is on PATH, andecho "$PATH"to see what the shell is actually searching. - In Makefiles, recipe lines must begin with a real tab character. "missing separator" always means spaces were used instead.
Tools worth reaching for
shellcheckbash -xset -euo pipefailcommand -vcat -A (to reveal tabs)
All 19 Shell errors
- /usr/bin/env: 'python': No such file or directory NewThe script's shebang asks for a command called python, and current Debian, Ubuntu, Fedora and macOS releases only ship…
- bash: !": event not found NewIn an interactive shell, an exclamation mark in double quotes triggers history expansion, and bash tried to find a…
- bash: [: : integer expression expected NewA numeric comparison such as -gt or -eq got something that is not a whole number. The text between the colons is the…
- bash: [: too many arguments NewA variable inside single brackets was left unquoted and its value contained spaces, or a glob that matched several…
- bash: $'\r': command not found NewThe script has Windows line endings. Bash treats the carriage return as part of the last token on each line, so…
- bash: Argument list too long NewA glob expanded to more arguments than the kernel's exec limit allows. The limit is on the total size of arguments…
- bash: bad interpreter: No such file or directory NewThe script's shebang line ends with a carriage return, so the kernel looks for an interpreter literally named…
- bash: bad substitutionInvalid parameter expansion syntax. May be caused by using bash-specific syntax in sh, or incorrect variable expansion.
- bash: command not foundThe shell cannot find the specified command. The program is not installed, not in PATH, or there's a typo.
- bash: Permission deniedThe script or binary does not have execute permission, or the user lacks permission to access the file.
- bash: syntax error near unexpected tokenThe shell encountered a syntax error, often caused by incorrect quoting, missing escapes, Windows line endings (\r\n)…
- bash: ulimit: open files: cannot modify limit: Operation not permitted NewAn unprivileged shell can lower its soft limit or raise it up to the hard limit, but never past the hard limit…
- bash: unbound variableA variable was referenced but not set, and the script uses 'set -u' (nounset) which treats unset variables as errors.
- bash: warning: setlocale: LC_ALL: cannot change locale NewSSH forwards the client's locale variables and the server has no such locale generated, so every login prints the…
- Make: *** missing separator. Stop.A recipe line is indented with spaces instead of a TAB, or a stray character precedes a rule. Make requires recipe…
- PowerShell: File is not digitally signedPowerShell's execution policy requires scripts to be digitally signed but the script has no valid signature.
- sed: -i may not be used with stdin / extra characters after command (macOS) NewmacOS ships BSD sed, where -i takes a mandatory backup suffix argument. A script written against GNU sed passes the…
- sudo: a terminal is required to read the password Newsudo wanted a password but had no terminal to ask on, because the command ran over ssh without a TTY, from cron, in a…
- zsh: no matches foundZsh's glob expansion found no files matching the pattern and errors by default (unlike bash which passes the literal…
Other categories
- AI 35Rate limits, context windows, GPU memory and model-serving failures.
- Ansible 18Unreachable hosts, become passwords, undefined variables and Jinja2 failures.
- API 20Auth headers, payload limits, versioning, idempotency and webhook signatures.
- Apple 20Command line tools, dyld, Homebrew permissions, notarisation and Keychain.
- Auth 20OIDC, SAML, Auth0, Okta, Keycloak, passkeys and MFA failures.
- BigData 17Spark, Kafka, Airflow, Snowflake, Flink and Databricks failures.
- C# 18NuGet restore, null references, EF Core migrations, async deadlocks and Blazor…
- C++ 20Segfaults, linker errors, memory corruption and template deduction failures.
- Caching 20Cache stampedes, stale content, Varnish and CloudFront failures.
- CI/CD 18GitHub Actions, GitLab CI, Jenkins, CircleCI: permissions, runners and…
- Client 21CORS, mixed content, module resolution, memory limits and framework runtime…
- Cloud 25IAM permissions, quotas, service limits and credential failures.
- Dart 20Null safety, pub version solving and build toolchain problems.
- Database 41Connections, deadlocks, constraints, replication and memory limits.
- DNS 20NXDOMAIN, SERVFAIL, timeouts, propagation and delegation problems.
- Docker 27Daemon connectivity, disk space, image pulls, ports and architecture mismatches.
- Elixir 18GenServer timeouts, supervision failures and Mix compilation problems.
- Email 20Delivery failures, relay denial, authentication, SPF, DKIM and DMARC.
- Frontend 23Hydration mismatches, bundler resolution, layout shift and font loading.
- Git 20Merge conflicts, rejected pushes, detached HEAD, LFS and repository corruption.
- Go 19Nil map assignment, concurrent map access, context cancellation and deadlocks.
- GraphQL 19Validation, depth limits, N+1 queries and fragment problems.
- gRPC 17Status codes, deadlines, message limits, TLS and HTTP/2 transport failures.
- HTTP 494xx client errors, 5xx server errors, redirects, headers and protocol problems.
- ICMP 23Destination unreachable, time exceeded, fragmentation needed and redirects.
- Ingress 20404 default backend, missing TLS secrets, IngressClass and path matching.
- Java 19Class loading, dependency resolution, connection pools and JVM version…
- JavaScript 42npm resolution, async pitfalls, hydration, memory limits and runtime type…
- Kubernetes 34CrashLoopBackOff, ImagePullBackOff, OOMKilled, RBAC, scheduling and storage.
- Logging 18Log4j, Logback, Fluentd, Logstash and CloudWatch ingestion problems.
- MessageQueue 20Kafka, RabbitMQ, SQS, NATS and Celery: lag, rebalancing and poison messages.
- Mobile 20Gradle, CocoaPods, Xcode signing, Metro bundler and toolchain mismatches.
- Monitoring 18Prometheus scrapes, Grafana data sources, OpenTelemetry exporters and agent…
- Network 35Refused connections, timeouts, resets, MTU problems and port exhaustion.
- Performance 19GC pauses, thread pool starvation and event loop blocking.
- PHP 20Memory limits, execution timeouts, autoloading, Composer and PDO connections.
- Proxy 20nginx, Envoy, HAProxy, Traefik, Caddy and Cloudflare upstream failures.
- Python 35Imports, virtual environments, encoding, concurrency and dependency conflicts.
- Regex 17Catastrophic backtracking, back references, escaping and engine differences.
- Ruby 20Bundler, migrations, native extensions, encoding and asset compilation.
- Rust 19Borrow checker, ownership moves, trait bounds and lifetime mismatches.
- Scala 17Dependency resolution, binary compatibility and type inference failures.
- Security 25JWT validation, CSRF, OAuth grants, SELinux, SSH host keys and CSP.
- Serverless 20Lambda timeouts, package size limits, VPC networking and cold starts.
- Storage 19S3 permissions, NFS mounts, quotas, signed URLs and volume attachment.
- Svelte 20Store subscriptions, load functions and server/client boundaries.
- System 26Disk space, systemd units, file descriptors, OOM killer and scheduled jobs.
- Terraform 18State locks, provider auth, drift, dependency cycles and plan-time unknowns.
- Testing 18Jest, pytest, JUnit, Cypress and Playwright: fixtures, snapshots and timeouts.
- TLS 24Untrusted authorities, expiry, hostname mismatch, chains and cipher negotiation.
- TypeScript 19Assignability, missing declarations, strict null checks and generic constraints.
- Virtualization 20VirtualBox, VMware, Hyper-V, WSL, KVM and hypervisor conflicts.
- Web3 17Gas estimation, nonce management and reverted transactions.
- WebAssembly 17Compile errors, memory bounds and host binding mismatches.
- WebServer 20nginx, Apache, IIS and Caddy: binding, permissions, rewrites and TLS.
- Windows 20Installer failures, missing runtimes, update errors and permission problems.