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 presents the forensic synthetic code analysis of HariSekhon/DevOps-Bash-tools, a Shell project with 8,392 GitHub stars. SynthScan v2.0 examined 152,206 lines of code across 1728 source files, recording 2041 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 16.0 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2041 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| 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 | # sudo pkill -f sambapopup | 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 |
| 1882 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 | 113 | # ========================== | COMMENT |
| MEDIUM | .bash.d/linux.sh | 133 | # ========================= | 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 | 57 | # ========================================== | COMMENT |
| MEDIUM | install/install_d2.sh | 66 | # ========================================== | COMMENT |
| MEDIUM | bin/curl_auth.sh | 65 | # ============================================== | COMMENT |
| MEDIUM | bin/curl_auth.sh | 76 | # ============================================== | COMMENT |
| MEDIUM | bin/curl_auth.sh | 89 | # ============================================== | COMMENT |
| MEDIUM | bin/curl_auth.sh | 116 | # ============================================== | COMMENT |
| MEDIUM | bin/clean_caches.sh | 92 | # ===================================== | COMMENT |
| MEDIUM | bin/clean_caches.sh | 113 | # ========================= | COMMENT |
| MEDIUM | bin/clean_caches.sh | 133 | # ============================================================= | 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 | 449 | # ================================= | COMMENT |
| MEDIUM | lib/utils.sh | 705 | # ================================= | COMMENT |
| MEDIUM | lib/utils.sh | 1404 | # ============================== | COMMENT |
| MEDIUM | lib/utils.sh | 1436 | # ============================== | 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 | 1008 | # 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 | 52 | 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 | 112 | #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 | 89 | echo "Don't forget to add \$HOME/bin/codeql to \$PATH" | CODE |
| LOW | install/install_github_codeql.sh | 89 | 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 |