1200+ DevOps Bash Scripts - AWS, GCP, Kubernetes, Docker, CI/CD, APIs, SQL, PostgreSQL, MySQL, Hive, Impala, Kafka, Hadoop, Jenkins, GitHub, GitLab, BitBucket, Azure DevOps, TeamCity, Spotify, MP3, LDAP, Code/Build Linting, pkg mgmt for Linux, Mac, Python, Perl, Ruby, NodeJS, Golang, Advanced dotfiles: .bashrc, .vimrc, .gitconfig, .screenrc, tmux..
This report summarizes scanner evidence for HariSekhon/DevOps-Bash-tools, a Shell project with 8,428 GitHub stars. SynthScan examined 153,168 lines of code across 1736 source files, recording 2048 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 15.9 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 1985 finding(s).
Are imports declared and package/API names verified? 19 finding(s).
Are wrappers, guards, and repeated structures necessary? 44 finding(s).
Which changes need focused human review? 2048 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2048 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | buddy.yml | 1 | # | COMMENT |
| LOW | .drone.yml | 1 | --- | COMMENT |
| LOW | .drone.yml | 21 | COMMENT | |
| LOW | .pre-commit-config.yaml | 1 | # | COMMENT |
| LOW | .pre-commit-config.yaml | 41 | # Cross platform | COMMENT |
| LOW | .hound.yml | 1 | # | COMMENT |
| LOW | .mdl.rb | 1 | #!/usr/bin/env ruby | COMMENT |
| LOW | .appveyor.yml | 1 | # | COMMENT |
| LOW | .appveyor.yml | 41 | # enable SSH session accessible via my public key | COMMENT |
| LOW | .appveyor.yml | 61 | COMMENT | |
| LOW | azure-pipelines.yml | 1 | # vim:ts=2:sts=2:sw=2:et | COMMENT |
| LOW | azure-pipelines.yml | 41 | COMMENT | |
| LOW | .scrutinizer.yml | 1 | # | COMMENT |
| LOW | .cirrus.yml | 1 | # | COMMENT |
| LOW | .gitlab-ci.yml | 1 | # vim:ts=2:sts=2:sw=2:et | COMMENT |
| LOW | hadolint.yaml | 1 | # vim:ts=4:sts=4:sw=4:et | COMMENT |
| LOW | codefresh.yml | 1 | # | COMMENT |
| LOW | bitbucket-pipelines.yml | 1 | # | COMMENT |
| LOW | .bash.d/rancid.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/rancid.sh | 21 | export RANCID_HOME=~/rancid | COMMENT |
| LOW | .bash.d/rancid.sh | 61 | #alias cl=clogin | COMMENT |
| LOW | .bash.d/trivy.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/lolcat.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/android.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/teamcity.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/aliases.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/aliases.sh | 61 | #alias e=em | COMMENT |
| LOW | .bash.d/aliases.sh | 161 | COMMENT | |
| LOW | .bash.d/aliases.sh | 261 | fi | COMMENT |
| LOW | .bash.d/vim.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/network.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/postgres.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/python.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/golang.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/intellij.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/intellij.sh | 21 | COMMENT | |
| LOW | .bash.d/intellij.sh | 41 | # local path="$1" | COMMENT |
| LOW | .bash.d/intellij.sh | 61 | # | COMMENT |
| LOW | .bash.d/intellij.sh | 81 | # so use $! to specify the pid of the latest command in this shell | COMMENT |
| LOW | .bash.d/bash_it.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/argocd.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/kubernetes.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/kubernetes.sh | 361 | # sleep infinity only works on some distros | COMMENT |
| LOW | .bash.d/kafka.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/jenkins.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/circleci.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/travis_ci.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/spotify.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/gcp.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/linux.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/linux.sh | 121 | # When using Samba WinPopups on Linux in Windows workgroups - convenient back in the day but shouldn't be needed today w | COMMENT |
| LOW | .bash.d/spinner.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/prompt.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/prompt.sh | 41 | PS1_USER_COLOUR="$txtcyn" | COMMENT |
| LOW | .bash.d/prompt.sh | 61 | COMMENT | |
| LOW | .bash.d/aws-cloudshell.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/virtualbox.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/when.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/grype.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .bash.d/os_detection.sh | 1 | #!/usr/bin/env bash | COMMENT |
| 1888 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 56 | at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:66) | CODE |
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 57 | at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:56) | CODE |
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 58 | at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:2157) | CODE |
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 59 | at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:2127) | CODE |
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 60 | at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:2040) | CODE |
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 61 | at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:583) | CODE |
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 62 | at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getBlockLocations(Authorizati | CODE |
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 63 | at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNameno | CODE |
| CRITICAL⚡ | bigdata/impala_tables_row_counts.sh | 71 | at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1924) | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 55 | at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:66) | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 56 | at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:56) | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 57 | at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:2157) | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 58 | at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:2127) | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 59 | at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:2040) | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 60 | at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:583) | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 61 | at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getBlockLocations(Authorizati | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 62 | at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNameno | CODE |
| CRITICAL⚡ | bigdata/impala_foreach_table.sh | 70 | at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1924) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .bash.d/linux.sh | 120 | # ========================== | COMMENT |
| MEDIUM | .bash.d/linux.sh | 140 | # ========================= | COMMENT |
| MEDIUM | .bash.d/aws.sh | 27 | # ================== | COMMENT |
| MEDIUM | .bash.d/aws.sh | 38 | # ===================== | COMMENT |
| MEDIUM | .bash.d/aws.sh | 74 | # ================== | COMMENT |
| MEDIUM | .bash.d/aws.sh | 87 | # ================== | COMMENT |
| MEDIUM | install/install_d2.sh | 58 | # ========================================== | COMMENT |
| MEDIUM | install/install_d2.sh | 67 | # ========================================== | COMMENT |
| MEDIUM | bin/curl_auth.sh | 67 | # ============================================== | COMMENT |
| MEDIUM | bin/curl_auth.sh | 78 | # ============================================== | COMMENT |
| MEDIUM | bin/curl_auth.sh | 91 | # ============================================== | COMMENT |
| MEDIUM | bin/curl_auth.sh | 118 | # ============================================== | COMMENT |
| MEDIUM | bin/clean_caches.sh | 92 | # ===================================== | COMMENT |
| MEDIUM | bin/clean_caches.sh | 113 | # ========================= | COMMENT |
| MEDIUM | bin/clean_caches.sh | 133 | # ============================================================= | COMMENT |
| MEDIUM | bin/sleepuntil.sh | 105 | # =================================================================== | COMMENT |
| MEDIUM | checks/check_all.sh | 232 | # ======================================== | COMMENT |
| MEDIUM⚡ | setup/mac_settings.sh | 132 | # ============ | COMMENT |
| MEDIUM⚡ | setup/mac_settings.sh | 142 | # ============================ | COMMENT |
| MEDIUM⚡ | setup/mac_settings.sh | 150 | # ============== | COMMENT |
| MEDIUM⚡ | setup/mac_settings.sh | 156 | # =========== | COMMENT |
| MEDIUM⚡ | setup/mac_settings.sh | 164 | # =============== | COMMENT |
| MEDIUM⚡ | setup/mac_settings.sh | 174 | # ======================================= | COMMENT |
| MEDIUM | setup/mac_settings.sh | 189 | # =============== | COMMENT |
| MEDIUM | gcp/gke_kubectl.sh | 68 | # ============================================================ | COMMENT |
| MEDIUM | gcp/gke_kubectl.sh | 93 | # ============================================================ | COMMENT |
| MEDIUM | lib/utils.sh | 505 | # ================================= | COMMENT |
| MEDIUM | lib/utils.sh | 763 | # ================================= | COMMENT |
| MEDIUM | lib/utils.sh | 1462 | # ============================== | COMMENT |
| MEDIUM | lib/utils.sh | 1494 | # ============================== | COMMENT |
| MEDIUM | aws/aws_kubectl.sh | 61 | # ============================================================ | COMMENT |
| MEDIUM | aws/aws_kubectl.sh | 75 | # ============================================================ | COMMENT |
| MEDIUM | aws/aws_eks_available_ips.sh | 83 | #---------------------------------------------------- | COMMENT |
| MEDIUM | kubernetes/kubectl.sh | 57 | # ============================================================ | COMMENT |
| MEDIUM | kubernetes/kubectl.sh | 68 | # ============================================================ | COMMENT |
| MEDIUM⚡ | travis/.travis.yml | 25 | # ============================================================== | COMMENT |
| MEDIUM⚡ | travis/.travis.yml | 29 | # ========================================= | COMMENT |
| MEDIUM⚡ | travis/.travis.yml | 35 | # ============================================== | COMMENT |
| MEDIUM⚡ | travis/.travis.yml | 40 | # ======================================= | COMMENT |
| MEDIUM⚡ | travis/.travis.yml | 45 | # ====================================================== | COMMENT |
| MEDIUM⚡ | travis/.travis.yml | 50 | # ============================================== | COMMENT |
| MEDIUM⚡ | travis/.travis.yml | 55 | # ================================================================================= | COMMENT |
| MEDIUM⚡ | travis/.travis.yml | 62 | # ======================================== | COMMENT |
| MEDIUM | travis/.travis.yml | 77 | # ============================================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .appveyor.yml | 45 | # more useful at end to leverage .appveyor.yml tweaks like disabling broken mssql repo/dependencies, checking out projec | COMMENT |
| LOW | .bash.d/aws.sh | 150 | # this rarely changes so just set it once as initialization instead of passing lots of params | COMMENT |
| LOW | install/install_homebrew.sh | 60 | # can't just pass bash, and -s shell needs to be fully qualified path | COMMENT |
| LOW | python/python_find_library_executable.sh | 41 | # Rather than do an --ignore-installed which could cause all sorts of other issues, just use it from wherever it is foun | COMMENT |
| MEDIUM | checks/check_aws_no_git_credentials.sh | 17 | # This is a simplistic check, see Semgrep workflows under .github/workflows for more comprehensive check | COMMENT |
| LOW | spotify/spotify_backup_playlist.sh | 151 | # try exact match first as it's faster than regex and allows us just use simpler literal lines | COMMENT |
| LOW | spotify/spotify_backup_playlist.sh | 258 | # if we pass the second arg snapshot ID just use that to save an API call | COMMENT |
| LOW | spotify/spotify_backup_playlist.sh | 276 | # better to just use atomic moves so we can ./commit.sh even while this is running | COMMENT |
| LOW | spotify/spotify_backup_playlist.sh | 360 | # If we pass the second arg snapshot ID just use that to save an API call | COMMENT |
| LOW | spotify/spotify_backup_playlist.sh | 452 | # better to just use atomic moves so we can ./commit.sh even while this is running | COMMENT |
| LOW | gcp/gcp_info.sh | 22 | # (or just use Cloud Shell, will prompt you to set the project if it's not already) | COMMENT |
| LOW | internet/chrome.sh | 63 | # just call Chrome directly by path for simpler native chrome arg handling to be uniform across platforms | COMMENT |
| LOW | internet/brave.sh | 63 | # just call Brave directly by path for simpler native brave arg handling to be uniform across platforms | COMMENT |
| LOW | internet/firefox.sh | 65 | # just call Firefox directly by path for simpler native firefox arg handling to be uniform across platforms | COMMENT |
| MEDIUM | .github/workflows/fork-update-pr.yaml | 20 | # To be used in conjunction with the adjacent fork-sync.yaml which keeps the default branch up to date | COMMENT |
| LOW | docker-compose/jenkins.yml | 28 | # this is based off Alpine - Jenkinsfile is for Debian/Ubuntu systems like standard Jenkins, just use stock image wi | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .bash.d/git.sh | 1011 | # example of usage of this in the function below - make sure to put '$repo' or "\$repo" somewhere in the argument body t | COMMENT |
| LOW | install/getawless.sh | 57 | echo "don't forget to add it to your path, with, for example, 'sudo mv -- awless /usr/local/bin/' " | CODE |
| LOW | install/install_tfenv.sh | 55 | echo "Don't forget to add ~/.tfenv/bin to your \$PATH in your ~/.bashrc or similar" | CODE |
| LOW | install/install_cloud_sql_proxy.sh | 51 | echo "Done. Don't forget to add $HOME/bin to \$PATH" | CODE |
| LOW | install/install_java.sh | 29 | install_packages.sh java-headless # won't install to $PATH, make sure to add /usr/lib/jvm/jre/bin/ to $PATH (jre is | CODE |
| LOW | install/install_oracle_sqlcl.sh | 113 | #timestamp "Don't forget to add /usr/local/sqlcl/bin to your \$PATH and check for clashes with other programs called 'sq | COMMENT |
| LOW | install/install_codeql.sh | 93 | echo "Don't forget to add \$HOME/bin/codeql to \$PATH" | CODE |
| LOW | install/install_github_codeql.sh | 93 | echo "Don't forget to add \$HOME/bin/codeql to \$PATH" | CODE |
| LOW | teamcity/teamcity_api.sh | 73 | (don't forget to add '\$help' to the end to find out what attributes endpoints support): | CODE |
| LOW | configs/.config/terminalizer/config.yml | 63 | # Don't forget to add a backgroundColor style with a null as type | COMMENT |
| LOW | kubernetes/kubernetes_secrets_to_sealed_secrets.sh | 77 | echo "Completed. Don't forget to commit all sealed-secrets-*.yaml to Git" | CODE |
| LOW | git/git_tag_release.sh | 40 | Don't forget to 'git push --tags' to send the tag upstream | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | terraform/terraform_cloud_api.sh | 135 | # Create a new user token: | COMMENT |
| MEDIUM | bitbucket/bitbucket_api.sh | 85 | # Create a repo variable (see bitbucket_repo_set_env_vars.sh for a more convenient way of adding/updating env vars, opti | COMMENT |
| MEDIUM | bitbucket/bitbucket_api.sh | 106 | # Create a workspace variable (see bitbucket_workspace_set_env_vars.sh for a more convenient way of adding/updating env | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bigdata/cloudera_navigator_audit_logs.sh | 22 | # try to time bound it to a 1 year interval each time so it is more likely to succeed and less range to restart. I've wr | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/docker_generate_status_page.sh | 18 | # Usage: | COMMENT |
| LOW | bin/vault_pass.sh | 16 | # Usage: | COMMENT |
| LOW | bigdata/cloudera_navigator_audit_logs.sh | 34 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install/install_kubectl.sh | 62 | # WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Us | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | data/ini_config_add_if_missing.sh | 65 | # Check if the config block already exists in the file | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | applescript/is_screen_locked.py | 29 | CODE |