i’m pretty new to the shell scripting world and not sure, if i should give my scripts a .sh or .bash extension.

not sure what the pros and cons are.

  • GuybrushThreepwo0d@programming.dev
    link
    fedilink
    English
    arrow-up
    1
    ·
    3 years ago

    Just put the shebang at the top of your script:

    #! /usr/bin/env bash

    I’m not a big fan of extensions because if you put the script in your $PATH it’s weird to type do_the_thing.bash

  • igemnace@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    3 years ago

    If we’re talking specifically about executable scripts, here is #bash’s (libera.chat) factoid on the matter:

    Don’t use extensions for your scripts. Scripts define new commands that you can run, and commands are generally not given extensions. Do you run ls.elf? Also: bash scripts are not sh scripts (so don’t use .sh) and the extension will only cause dependencies headaches if the script gets rewritten in another language. See http://www.talisman.org/~erlkonig/documents/commandname-extensions-considered-harmful

    It’s for these reasons that I keep my executable scripts named without extensions (e.g. install).

    I sometimes have non-executable scripts: they’re chmod -x, they don’t have a shebang, and they’re explicitly made for source-ing (e.g. library functions). For these, I give them an extension depending on what shell I wrote them for (and thus, what shell you need to use to source them), e.g. library.bash or library.zsh.

  • denisde4ev@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    6 months ago

    in most cases no extension

    no extension for commands that are like tools - placed in /usr/local/bin/ or user’s folder ~/.local/bin/

    but I add extension for scripts that matters where they are placed, for example ./build.sh and /mnt/my-disk/snapshot.sh

    and source scripts in repo folder, such as github repo tools/src/tool-name.sh

    I symlink it from bin with no extension, example: ln -sr ~/dev/gh/my-script-repo-name/my-script.sh ~/.local/bin/my-script original source has extension, but not in bin folder