Is it correct to use /bin/sh in the hashbang if the Bourne shell isn't available in a distribution?












6















Generally, shell scripts contain the following comment at the first line of the script file: #!/bin/sh. According to the researches that I made, this is called "hash bang" and it is conventional comment. This comment informs Unix that this file is executed by the Bourne Shell under the directory /bin.



My question begins in that point. Up to now I have not seen this comment like #!/bin/bash. It is always #!/bin/sh. However, Ubuntu distributions do not have the Bourne Shell program. They have the Bourne Again Shell (bash).



In that point, is it correct to place the comment #!/bin/sh in shell scripts written in Ubuntu distributions?










share|improve this question




















  • 2





    AKA shebang, en.wikipedia.org/wiki/Shebang_(Unix)

    – K7AAY
    13 hours ago











  • See my answer to this serverfault question: #!/bin/sh vs #!/bin/bash for maximum portability.

    – Gordon Davisson
    11 hours ago
















6















Generally, shell scripts contain the following comment at the first line of the script file: #!/bin/sh. According to the researches that I made, this is called "hash bang" and it is conventional comment. This comment informs Unix that this file is executed by the Bourne Shell under the directory /bin.



My question begins in that point. Up to now I have not seen this comment like #!/bin/bash. It is always #!/bin/sh. However, Ubuntu distributions do not have the Bourne Shell program. They have the Bourne Again Shell (bash).



In that point, is it correct to place the comment #!/bin/sh in shell scripts written in Ubuntu distributions?










share|improve this question




















  • 2





    AKA shebang, en.wikipedia.org/wiki/Shebang_(Unix)

    – K7AAY
    13 hours ago











  • See my answer to this serverfault question: #!/bin/sh vs #!/bin/bash for maximum portability.

    – Gordon Davisson
    11 hours ago














6












6








6








Generally, shell scripts contain the following comment at the first line of the script file: #!/bin/sh. According to the researches that I made, this is called "hash bang" and it is conventional comment. This comment informs Unix that this file is executed by the Bourne Shell under the directory /bin.



My question begins in that point. Up to now I have not seen this comment like #!/bin/bash. It is always #!/bin/sh. However, Ubuntu distributions do not have the Bourne Shell program. They have the Bourne Again Shell (bash).



In that point, is it correct to place the comment #!/bin/sh in shell scripts written in Ubuntu distributions?










share|improve this question
















Generally, shell scripts contain the following comment at the first line of the script file: #!/bin/sh. According to the researches that I made, this is called "hash bang" and it is conventional comment. This comment informs Unix that this file is executed by the Bourne Shell under the directory /bin.



My question begins in that point. Up to now I have not seen this comment like #!/bin/bash. It is always #!/bin/sh. However, Ubuntu distributions do not have the Bourne Shell program. They have the Bourne Again Shell (bash).



In that point, is it correct to place the comment #!/bin/sh in shell scripts written in Ubuntu distributions?







bash shell-script shell ubuntu shebang






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 11 mins ago









Community

1




1










asked 13 hours ago









GoktugGoktug

2969




2969








  • 2





    AKA shebang, en.wikipedia.org/wiki/Shebang_(Unix)

    – K7AAY
    13 hours ago











  • See my answer to this serverfault question: #!/bin/sh vs #!/bin/bash for maximum portability.

    – Gordon Davisson
    11 hours ago














  • 2





    AKA shebang, en.wikipedia.org/wiki/Shebang_(Unix)

    – K7AAY
    13 hours ago











  • See my answer to this serverfault question: #!/bin/sh vs #!/bin/bash for maximum portability.

    – Gordon Davisson
    11 hours ago








2




2





AKA shebang, en.wikipedia.org/wiki/Shebang_(Unix)

– K7AAY
13 hours ago





AKA shebang, en.wikipedia.org/wiki/Shebang_(Unix)

– K7AAY
13 hours ago













See my answer to this serverfault question: #!/bin/sh vs #!/bin/bash for maximum portability.

– Gordon Davisson
11 hours ago





See my answer to this serverfault question: #!/bin/sh vs #!/bin/bash for maximum portability.

– Gordon Davisson
11 hours ago










4 Answers
4






active

oldest

votes


















5














Yes you can use #!/bin/sh in a script because /bin/sh is (hopefully) provided for on such systems, usually via a link of some sort that makes bash behave (more or less) like a sh would. Here's a Centos7 system, for example, that links sh to bash:



-bash-4.2$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Dec 4 16:48 /bin/sh -> bash
-bash-4.2$


You could also use #!/bin/bash if you are writing a bash script only for that system and want to use bash features. However, such scripts will suffer from portability problems, for example on OpenBSD where bash is only installed if the admin takes the trouble to install it (I do not) and then it is installed to /usr/local/bin/bash, not /bin/bash. A strictly POSIX #!/bin/sh script should be more portable.






share|improve this answer
























  • Note this: "When invoked as sh, Bash enters POSIX mode after reading the startup files." -- gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode

    – glenn jackman
    12 hours ago






  • 2





    When I write scripts for RHEL servers at my job, I use #!/bin/bash precisely so that I can take advantage of non-POSIX features.

    – Monty Harder
    11 hours ago











  • @MontyHarder IIRC on RHEL /bin/sh it's a symlink to bash, is that correct ? I know for sure on CentOS it is, though.

    – Sergiy Kolodyazhnyy
    7 hours ago



















5














#!/bin/sh should work on all Unix and Unix-like distributions. It is generally thought of as the most portable hashbang so long as your script is kept POSIX compliant.





#!/bin/sh is normally just a link now as the Bourne shell is no longer maintained. On many Unix systems /bin/sh will be a link to /bin/ksh, on many Linux systems it will be a link to /bin/bash (bash invoked as sh is equivalent to running bash --posix) however on Ubuntu it is a link to /bin/dash.



It is an important placeholder though because it allows for much greater portability than other methods, so long as your script is strictly POSIX compliant (repeated to stress importance).



Note: When bash is invoked in POSIX mode it will still allow some non-POSIX things like [[, arrays, and more. Those things will fail on a non-bash system.






share|improve this answer





















  • 1





    I'm not sure I'd call it just a placeholder, since it does happen to be path to a standard POSIX shell in most (even if not all) OS's, and the name of the standard shell in the standard itself.

    – ilkkachu
    10 hours ago






  • 1





    "on Ubuntu it is a link to /bin/dash" and in general other Debian-based systems. IIRC on FreeBSD/GhostBSD it's a symlink to /bin/ash as well.

    – Sergiy Kolodyazhnyy
    7 hours ago



















2














You asked




is it correct to place the comment #!/bin/sh in shell scripts written in ubuntu distributions ?




The answer depends on what you write in the shell script.




  • If you strictly use portable POSIX-compliant scripts, and don't use any bash-specific commands, then you can use /bin/sh.


  • If you know that you are only ever using the script on a machine with bash, and you want to use bash-specific syntax, then you should use /bin/bash


  • If you're want to be sure that the script will work on an assortment of unix machines, then you should use only POSIX-compliant syntax, and /bin/sh


  • If you regularly use another shell (e.g. ksh, zsh or tcsh), and want to use that syntax in your script, then you should use the appropriate interpreter (like /bin/ksh93, /bin/zsh, or /bin/tcsh)







share|improve this answer








New contributor




Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




























    0














    The "#!" comment does not always use /bin/bash or /bin/sh. It just lists whatever the interpreter should be, not just for shell scripting. For example my python scripts usually start with #!/usr/bin/env python.



    Now the difference between #!/bin/sh and #!/bin/bash is that /bin/sh is not always a symlink to /bin/bash. Often but not always. Ubuntu is a notable exception here. I have seen scripts working fine on CentOS but failing on Ubuntu because author used bash-specific syntax with #!/bin/sh.






    share|improve this answer























      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "106"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f496505%2fis-it-correct-to-use-bin-sh-in-the-hashbang-if-the-bourne-shell-isnt-available%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      4 Answers
      4






      active

      oldest

      votes








      4 Answers
      4






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      5














      Yes you can use #!/bin/sh in a script because /bin/sh is (hopefully) provided for on such systems, usually via a link of some sort that makes bash behave (more or less) like a sh would. Here's a Centos7 system, for example, that links sh to bash:



      -bash-4.2$ ls -l /bin/sh
      lrwxrwxrwx 1 root root 4 Dec 4 16:48 /bin/sh -> bash
      -bash-4.2$


      You could also use #!/bin/bash if you are writing a bash script only for that system and want to use bash features. However, such scripts will suffer from portability problems, for example on OpenBSD where bash is only installed if the admin takes the trouble to install it (I do not) and then it is installed to /usr/local/bin/bash, not /bin/bash. A strictly POSIX #!/bin/sh script should be more portable.






      share|improve this answer
























      • Note this: "When invoked as sh, Bash enters POSIX mode after reading the startup files." -- gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode

        – glenn jackman
        12 hours ago






      • 2





        When I write scripts for RHEL servers at my job, I use #!/bin/bash precisely so that I can take advantage of non-POSIX features.

        – Monty Harder
        11 hours ago











      • @MontyHarder IIRC on RHEL /bin/sh it's a symlink to bash, is that correct ? I know for sure on CentOS it is, though.

        – Sergiy Kolodyazhnyy
        7 hours ago
















      5














      Yes you can use #!/bin/sh in a script because /bin/sh is (hopefully) provided for on such systems, usually via a link of some sort that makes bash behave (more or less) like a sh would. Here's a Centos7 system, for example, that links sh to bash:



      -bash-4.2$ ls -l /bin/sh
      lrwxrwxrwx 1 root root 4 Dec 4 16:48 /bin/sh -> bash
      -bash-4.2$


      You could also use #!/bin/bash if you are writing a bash script only for that system and want to use bash features. However, such scripts will suffer from portability problems, for example on OpenBSD where bash is only installed if the admin takes the trouble to install it (I do not) and then it is installed to /usr/local/bin/bash, not /bin/bash. A strictly POSIX #!/bin/sh script should be more portable.






      share|improve this answer
























      • Note this: "When invoked as sh, Bash enters POSIX mode after reading the startup files." -- gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode

        – glenn jackman
        12 hours ago






      • 2





        When I write scripts for RHEL servers at my job, I use #!/bin/bash precisely so that I can take advantage of non-POSIX features.

        – Monty Harder
        11 hours ago











      • @MontyHarder IIRC on RHEL /bin/sh it's a symlink to bash, is that correct ? I know for sure on CentOS it is, though.

        – Sergiy Kolodyazhnyy
        7 hours ago














      5












      5








      5







      Yes you can use #!/bin/sh in a script because /bin/sh is (hopefully) provided for on such systems, usually via a link of some sort that makes bash behave (more or less) like a sh would. Here's a Centos7 system, for example, that links sh to bash:



      -bash-4.2$ ls -l /bin/sh
      lrwxrwxrwx 1 root root 4 Dec 4 16:48 /bin/sh -> bash
      -bash-4.2$


      You could also use #!/bin/bash if you are writing a bash script only for that system and want to use bash features. However, such scripts will suffer from portability problems, for example on OpenBSD where bash is only installed if the admin takes the trouble to install it (I do not) and then it is installed to /usr/local/bin/bash, not /bin/bash. A strictly POSIX #!/bin/sh script should be more portable.






      share|improve this answer













      Yes you can use #!/bin/sh in a script because /bin/sh is (hopefully) provided for on such systems, usually via a link of some sort that makes bash behave (more or less) like a sh would. Here's a Centos7 system, for example, that links sh to bash:



      -bash-4.2$ ls -l /bin/sh
      lrwxrwxrwx 1 root root 4 Dec 4 16:48 /bin/sh -> bash
      -bash-4.2$


      You could also use #!/bin/bash if you are writing a bash script only for that system and want to use bash features. However, such scripts will suffer from portability problems, for example on OpenBSD where bash is only installed if the admin takes the trouble to install it (I do not) and then it is installed to /usr/local/bin/bash, not /bin/bash. A strictly POSIX #!/bin/sh script should be more portable.







      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered 13 hours ago









      thrigthrig

      24.6k23056




      24.6k23056













      • Note this: "When invoked as sh, Bash enters POSIX mode after reading the startup files." -- gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode

        – glenn jackman
        12 hours ago






      • 2





        When I write scripts for RHEL servers at my job, I use #!/bin/bash precisely so that I can take advantage of non-POSIX features.

        – Monty Harder
        11 hours ago











      • @MontyHarder IIRC on RHEL /bin/sh it's a symlink to bash, is that correct ? I know for sure on CentOS it is, though.

        – Sergiy Kolodyazhnyy
        7 hours ago



















      • Note this: "When invoked as sh, Bash enters POSIX mode after reading the startup files." -- gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode

        – glenn jackman
        12 hours ago






      • 2





        When I write scripts for RHEL servers at my job, I use #!/bin/bash precisely so that I can take advantage of non-POSIX features.

        – Monty Harder
        11 hours ago











      • @MontyHarder IIRC on RHEL /bin/sh it's a symlink to bash, is that correct ? I know for sure on CentOS it is, though.

        – Sergiy Kolodyazhnyy
        7 hours ago

















      Note this: "When invoked as sh, Bash enters POSIX mode after reading the startup files." -- gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode

      – glenn jackman
      12 hours ago





      Note this: "When invoked as sh, Bash enters POSIX mode after reading the startup files." -- gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode

      – glenn jackman
      12 hours ago




      2




      2





      When I write scripts for RHEL servers at my job, I use #!/bin/bash precisely so that I can take advantage of non-POSIX features.

      – Monty Harder
      11 hours ago





      When I write scripts for RHEL servers at my job, I use #!/bin/bash precisely so that I can take advantage of non-POSIX features.

      – Monty Harder
      11 hours ago













      @MontyHarder IIRC on RHEL /bin/sh it's a symlink to bash, is that correct ? I know for sure on CentOS it is, though.

      – Sergiy Kolodyazhnyy
      7 hours ago





      @MontyHarder IIRC on RHEL /bin/sh it's a symlink to bash, is that correct ? I know for sure on CentOS it is, though.

      – Sergiy Kolodyazhnyy
      7 hours ago













      5














      #!/bin/sh should work on all Unix and Unix-like distributions. It is generally thought of as the most portable hashbang so long as your script is kept POSIX compliant.





      #!/bin/sh is normally just a link now as the Bourne shell is no longer maintained. On many Unix systems /bin/sh will be a link to /bin/ksh, on many Linux systems it will be a link to /bin/bash (bash invoked as sh is equivalent to running bash --posix) however on Ubuntu it is a link to /bin/dash.



      It is an important placeholder though because it allows for much greater portability than other methods, so long as your script is strictly POSIX compliant (repeated to stress importance).



      Note: When bash is invoked in POSIX mode it will still allow some non-POSIX things like [[, arrays, and more. Those things will fail on a non-bash system.






      share|improve this answer





















      • 1





        I'm not sure I'd call it just a placeholder, since it does happen to be path to a standard POSIX shell in most (even if not all) OS's, and the name of the standard shell in the standard itself.

        – ilkkachu
        10 hours ago






      • 1





        "on Ubuntu it is a link to /bin/dash" and in general other Debian-based systems. IIRC on FreeBSD/GhostBSD it's a symlink to /bin/ash as well.

        – Sergiy Kolodyazhnyy
        7 hours ago
















      5














      #!/bin/sh should work on all Unix and Unix-like distributions. It is generally thought of as the most portable hashbang so long as your script is kept POSIX compliant.





      #!/bin/sh is normally just a link now as the Bourne shell is no longer maintained. On many Unix systems /bin/sh will be a link to /bin/ksh, on many Linux systems it will be a link to /bin/bash (bash invoked as sh is equivalent to running bash --posix) however on Ubuntu it is a link to /bin/dash.



      It is an important placeholder though because it allows for much greater portability than other methods, so long as your script is strictly POSIX compliant (repeated to stress importance).



      Note: When bash is invoked in POSIX mode it will still allow some non-POSIX things like [[, arrays, and more. Those things will fail on a non-bash system.






      share|improve this answer





















      • 1





        I'm not sure I'd call it just a placeholder, since it does happen to be path to a standard POSIX shell in most (even if not all) OS's, and the name of the standard shell in the standard itself.

        – ilkkachu
        10 hours ago






      • 1





        "on Ubuntu it is a link to /bin/dash" and in general other Debian-based systems. IIRC on FreeBSD/GhostBSD it's a symlink to /bin/ash as well.

        – Sergiy Kolodyazhnyy
        7 hours ago














      5












      5








      5







      #!/bin/sh should work on all Unix and Unix-like distributions. It is generally thought of as the most portable hashbang so long as your script is kept POSIX compliant.





      #!/bin/sh is normally just a link now as the Bourne shell is no longer maintained. On many Unix systems /bin/sh will be a link to /bin/ksh, on many Linux systems it will be a link to /bin/bash (bash invoked as sh is equivalent to running bash --posix) however on Ubuntu it is a link to /bin/dash.



      It is an important placeholder though because it allows for much greater portability than other methods, so long as your script is strictly POSIX compliant (repeated to stress importance).



      Note: When bash is invoked in POSIX mode it will still allow some non-POSIX things like [[, arrays, and more. Those things will fail on a non-bash system.






      share|improve this answer















      #!/bin/sh should work on all Unix and Unix-like distributions. It is generally thought of as the most portable hashbang so long as your script is kept POSIX compliant.





      #!/bin/sh is normally just a link now as the Bourne shell is no longer maintained. On many Unix systems /bin/sh will be a link to /bin/ksh, on many Linux systems it will be a link to /bin/bash (bash invoked as sh is equivalent to running bash --posix) however on Ubuntu it is a link to /bin/dash.



      It is an important placeholder though because it allows for much greater portability than other methods, so long as your script is strictly POSIX compliant (repeated to stress importance).



      Note: When bash is invoked in POSIX mode it will still allow some non-POSIX things like [[, arrays, and more. Those things will fail on a non-bash system.







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited 10 hours ago

























      answered 12 hours ago









      Jesse_bJesse_b

      12.2k23064




      12.2k23064








      • 1





        I'm not sure I'd call it just a placeholder, since it does happen to be path to a standard POSIX shell in most (even if not all) OS's, and the name of the standard shell in the standard itself.

        – ilkkachu
        10 hours ago






      • 1





        "on Ubuntu it is a link to /bin/dash" and in general other Debian-based systems. IIRC on FreeBSD/GhostBSD it's a symlink to /bin/ash as well.

        – Sergiy Kolodyazhnyy
        7 hours ago














      • 1





        I'm not sure I'd call it just a placeholder, since it does happen to be path to a standard POSIX shell in most (even if not all) OS's, and the name of the standard shell in the standard itself.

        – ilkkachu
        10 hours ago






      • 1





        "on Ubuntu it is a link to /bin/dash" and in general other Debian-based systems. IIRC on FreeBSD/GhostBSD it's a symlink to /bin/ash as well.

        – Sergiy Kolodyazhnyy
        7 hours ago








      1




      1





      I'm not sure I'd call it just a placeholder, since it does happen to be path to a standard POSIX shell in most (even if not all) OS's, and the name of the standard shell in the standard itself.

      – ilkkachu
      10 hours ago





      I'm not sure I'd call it just a placeholder, since it does happen to be path to a standard POSIX shell in most (even if not all) OS's, and the name of the standard shell in the standard itself.

      – ilkkachu
      10 hours ago




      1




      1





      "on Ubuntu it is a link to /bin/dash" and in general other Debian-based systems. IIRC on FreeBSD/GhostBSD it's a symlink to /bin/ash as well.

      – Sergiy Kolodyazhnyy
      7 hours ago





      "on Ubuntu it is a link to /bin/dash" and in general other Debian-based systems. IIRC on FreeBSD/GhostBSD it's a symlink to /bin/ash as well.

      – Sergiy Kolodyazhnyy
      7 hours ago











      2














      You asked




      is it correct to place the comment #!/bin/sh in shell scripts written in ubuntu distributions ?




      The answer depends on what you write in the shell script.




      • If you strictly use portable POSIX-compliant scripts, and don't use any bash-specific commands, then you can use /bin/sh.


      • If you know that you are only ever using the script on a machine with bash, and you want to use bash-specific syntax, then you should use /bin/bash


      • If you're want to be sure that the script will work on an assortment of unix machines, then you should use only POSIX-compliant syntax, and /bin/sh


      • If you regularly use another shell (e.g. ksh, zsh or tcsh), and want to use that syntax in your script, then you should use the appropriate interpreter (like /bin/ksh93, /bin/zsh, or /bin/tcsh)







      share|improve this answer








      New contributor




      Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.

























        2














        You asked




        is it correct to place the comment #!/bin/sh in shell scripts written in ubuntu distributions ?




        The answer depends on what you write in the shell script.




        • If you strictly use portable POSIX-compliant scripts, and don't use any bash-specific commands, then you can use /bin/sh.


        • If you know that you are only ever using the script on a machine with bash, and you want to use bash-specific syntax, then you should use /bin/bash


        • If you're want to be sure that the script will work on an assortment of unix machines, then you should use only POSIX-compliant syntax, and /bin/sh


        • If you regularly use another shell (e.g. ksh, zsh or tcsh), and want to use that syntax in your script, then you should use the appropriate interpreter (like /bin/ksh93, /bin/zsh, or /bin/tcsh)







        share|improve this answer








        New contributor




        Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.























          2












          2








          2







          You asked




          is it correct to place the comment #!/bin/sh in shell scripts written in ubuntu distributions ?




          The answer depends on what you write in the shell script.




          • If you strictly use portable POSIX-compliant scripts, and don't use any bash-specific commands, then you can use /bin/sh.


          • If you know that you are only ever using the script on a machine with bash, and you want to use bash-specific syntax, then you should use /bin/bash


          • If you're want to be sure that the script will work on an assortment of unix machines, then you should use only POSIX-compliant syntax, and /bin/sh


          • If you regularly use another shell (e.g. ksh, zsh or tcsh), and want to use that syntax in your script, then you should use the appropriate interpreter (like /bin/ksh93, /bin/zsh, or /bin/tcsh)







          share|improve this answer








          New contributor




          Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.










          You asked




          is it correct to place the comment #!/bin/sh in shell scripts written in ubuntu distributions ?




          The answer depends on what you write in the shell script.




          • If you strictly use portable POSIX-compliant scripts, and don't use any bash-specific commands, then you can use /bin/sh.


          • If you know that you are only ever using the script on a machine with bash, and you want to use bash-specific syntax, then you should use /bin/bash


          • If you're want to be sure that the script will work on an assortment of unix machines, then you should use only POSIX-compliant syntax, and /bin/sh


          • If you regularly use another shell (e.g. ksh, zsh or tcsh), and want to use that syntax in your script, then you should use the appropriate interpreter (like /bin/ksh93, /bin/zsh, or /bin/tcsh)








          share|improve this answer








          New contributor




          Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.









          share|improve this answer



          share|improve this answer






          New contributor




          Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.









          answered 7 hours ago









          StoborStobor

          1212




          1212




          New contributor




          Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.





          New contributor





          Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.






          Stobor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.























              0














              The "#!" comment does not always use /bin/bash or /bin/sh. It just lists whatever the interpreter should be, not just for shell scripting. For example my python scripts usually start with #!/usr/bin/env python.



              Now the difference between #!/bin/sh and #!/bin/bash is that /bin/sh is not always a symlink to /bin/bash. Often but not always. Ubuntu is a notable exception here. I have seen scripts working fine on CentOS but failing on Ubuntu because author used bash-specific syntax with #!/bin/sh.






              share|improve this answer




























                0














                The "#!" comment does not always use /bin/bash or /bin/sh. It just lists whatever the interpreter should be, not just for shell scripting. For example my python scripts usually start with #!/usr/bin/env python.



                Now the difference between #!/bin/sh and #!/bin/bash is that /bin/sh is not always a symlink to /bin/bash. Often but not always. Ubuntu is a notable exception here. I have seen scripts working fine on CentOS but failing on Ubuntu because author used bash-specific syntax with #!/bin/sh.






                share|improve this answer


























                  0












                  0








                  0







                  The "#!" comment does not always use /bin/bash or /bin/sh. It just lists whatever the interpreter should be, not just for shell scripting. For example my python scripts usually start with #!/usr/bin/env python.



                  Now the difference between #!/bin/sh and #!/bin/bash is that /bin/sh is not always a symlink to /bin/bash. Often but not always. Ubuntu is a notable exception here. I have seen scripts working fine on CentOS but failing on Ubuntu because author used bash-specific syntax with #!/bin/sh.






                  share|improve this answer













                  The "#!" comment does not always use /bin/bash or /bin/sh. It just lists whatever the interpreter should be, not just for shell scripting. For example my python scripts usually start with #!/usr/bin/env python.



                  Now the difference between #!/bin/sh and #!/bin/bash is that /bin/sh is not always a symlink to /bin/bash. Often but not always. Ubuntu is a notable exception here. I have seen scripts working fine on CentOS but failing on Ubuntu because author used bash-specific syntax with #!/bin/sh.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 55 mins ago









                  aragaeraragaer

                  31314




                  31314






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Unix & Linux Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f496505%2fis-it-correct-to-use-bin-sh-in-the-hashbang-if-the-bourne-shell-isnt-available%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Accessing regular linux commands in Huawei's Dopra Linux

                      Can't connect RFCOMM socket: Host is down

                      Kernel panic - not syncing: Fatal Exception in Interrupt