Strange behavior in $(dirname `readlink -f $0`)












10














When I run the following as a normal user, everything is fine:



$(dirname `readlink -f $0`)


but after I switched to root, the following error occurred:



readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.


Any ideas? I tried on local Fedora 16 and Amazon EC2, both running bash shell.



edit for illustration.



apologze that I did not further illustrate the issue here. here is the scenario:



using normal user account:



$ pwd 
/home/myuser
$ export MY_DIR=$(dirname `readlink -f $0`)
$ echo MY_DIR
/home/myuser


using root:



# pwd
/root
# export ROOT_DIR=$(dirname `readlink -f $0`)
readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.

# export ROOT_DIR=echo $(dirname `readlink -f -- $0`)
# echo $ROOT_DIR
/root









share|improve this question





























    10














    When I run the following as a normal user, everything is fine:



    $(dirname `readlink -f $0`)


    but after I switched to root, the following error occurred:



    readlink: invalid option -- 'b'
    Try `readlink --help' for more information.
    dirname: missing operand
    Try `dirname --help' for more information.


    Any ideas? I tried on local Fedora 16 and Amazon EC2, both running bash shell.



    edit for illustration.



    apologze that I did not further illustrate the issue here. here is the scenario:



    using normal user account:



    $ pwd 
    /home/myuser
    $ export MY_DIR=$(dirname `readlink -f $0`)
    $ echo MY_DIR
    /home/myuser


    using root:



    # pwd
    /root
    # export ROOT_DIR=$(dirname `readlink -f $0`)
    readlink: invalid option -- 'b'
    Try `readlink --help' for more information.
    dirname: missing operand
    Try `dirname --help' for more information.

    # export ROOT_DIR=echo $(dirname `readlink -f -- $0`)
    # echo $ROOT_DIR
    /root









    share|improve this question



























      10












      10








      10


      3





      When I run the following as a normal user, everything is fine:



      $(dirname `readlink -f $0`)


      but after I switched to root, the following error occurred:



      readlink: invalid option -- 'b'
      Try `readlink --help' for more information.
      dirname: missing operand
      Try `dirname --help' for more information.


      Any ideas? I tried on local Fedora 16 and Amazon EC2, both running bash shell.



      edit for illustration.



      apologze that I did not further illustrate the issue here. here is the scenario:



      using normal user account:



      $ pwd 
      /home/myuser
      $ export MY_DIR=$(dirname `readlink -f $0`)
      $ echo MY_DIR
      /home/myuser


      using root:



      # pwd
      /root
      # export ROOT_DIR=$(dirname `readlink -f $0`)
      readlink: invalid option -- 'b'
      Try `readlink --help' for more information.
      dirname: missing operand
      Try `dirname --help' for more information.

      # export ROOT_DIR=echo $(dirname `readlink -f -- $0`)
      # echo $ROOT_DIR
      /root









      share|improve this question















      When I run the following as a normal user, everything is fine:



      $(dirname `readlink -f $0`)


      but after I switched to root, the following error occurred:



      readlink: invalid option -- 'b'
      Try `readlink --help' for more information.
      dirname: missing operand
      Try `dirname --help' for more information.


      Any ideas? I tried on local Fedora 16 and Amazon EC2, both running bash shell.



      edit for illustration.



      apologze that I did not further illustrate the issue here. here is the scenario:



      using normal user account:



      $ pwd 
      /home/myuser
      $ export MY_DIR=$(dirname `readlink -f $0`)
      $ echo MY_DIR
      /home/myuser


      using root:



      # pwd
      /root
      # export ROOT_DIR=$(dirname `readlink -f $0`)
      readlink: invalid option -- 'b'
      Try `readlink --help' for more information.
      dirname: missing operand
      Try `dirname --help' for more information.

      # export ROOT_DIR=echo $(dirname `readlink -f -- $0`)
      # echo $ROOT_DIR
      /root






      bash






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Feb 1 '12 at 13:38

























      asked Jan 31 '12 at 3:41









      d4v1dv00

      245238




      245238






















          2 Answers
          2






          active

          oldest

          votes


















          12














          This should be the same error as in a user login shell, because in a login shell the 0 shell parameter, expanding to the name of the current process, gives -bash, the minus indicating the login shell. You now see where the -b error comes from.



          Try instead



          echo "$( dirname "$(readlink -f -- "$0")" )"





          share|improve this answer































            3














            If you really want the directory name of the shell script which is being run:



            script_dir="$(dirname -- "$(readlink -f -- "$0")")"


            Yes, it's a bit cludgy, but it's safe.



            If you want the current shell, you can try @MichaelMrozek's suggestion of using $SHELL.






            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%2f30446%2fstrange-behavior-in-dirname-readlink-f-0%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              12














              This should be the same error as in a user login shell, because in a login shell the 0 shell parameter, expanding to the name of the current process, gives -bash, the minus indicating the login shell. You now see where the -b error comes from.



              Try instead



              echo "$( dirname "$(readlink -f -- "$0")" )"





              share|improve this answer




























                12














                This should be the same error as in a user login shell, because in a login shell the 0 shell parameter, expanding to the name of the current process, gives -bash, the minus indicating the login shell. You now see where the -b error comes from.



                Try instead



                echo "$( dirname "$(readlink -f -- "$0")" )"





                share|improve this answer


























                  12












                  12








                  12






                  This should be the same error as in a user login shell, because in a login shell the 0 shell parameter, expanding to the name of the current process, gives -bash, the minus indicating the login shell. You now see where the -b error comes from.



                  Try instead



                  echo "$( dirname "$(readlink -f -- "$0")" )"





                  share|improve this answer














                  This should be the same error as in a user login shell, because in a login shell the 0 shell parameter, expanding to the name of the current process, gives -bash, the minus indicating the login shell. You now see where the -b error comes from.



                  Try instead



                  echo "$( dirname "$(readlink -f -- "$0")" )"






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 13 at 7:18









                  Kusalananda

                  121k16229372




                  121k16229372










                  answered Jan 31 '12 at 5:35









                  enzotib

                  33.5k710393




                  33.5k710393

























                      3














                      If you really want the directory name of the shell script which is being run:



                      script_dir="$(dirname -- "$(readlink -f -- "$0")")"


                      Yes, it's a bit cludgy, but it's safe.



                      If you want the current shell, you can try @MichaelMrozek's suggestion of using $SHELL.






                      share|improve this answer


























                        3














                        If you really want the directory name of the shell script which is being run:



                        script_dir="$(dirname -- "$(readlink -f -- "$0")")"


                        Yes, it's a bit cludgy, but it's safe.



                        If you want the current shell, you can try @MichaelMrozek's suggestion of using $SHELL.






                        share|improve this answer
























                          3












                          3








                          3






                          If you really want the directory name of the shell script which is being run:



                          script_dir="$(dirname -- "$(readlink -f -- "$0")")"


                          Yes, it's a bit cludgy, but it's safe.



                          If you want the current shell, you can try @MichaelMrozek's suggestion of using $SHELL.






                          share|improve this answer












                          If you really want the directory name of the shell script which is being run:



                          script_dir="$(dirname -- "$(readlink -f -- "$0")")"


                          Yes, it's a bit cludgy, but it's safe.



                          If you want the current shell, you can try @MichaelMrozek's suggestion of using $SHELL.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Jan 31 '12 at 10:27









                          l0b0

                          27.6k17113242




                          27.6k17113242






























                              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.





                              Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                              Please pay close attention to the following guidance:


                              • 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%2f30446%2fstrange-behavior-in-dirname-readlink-f-0%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

                              How to make a Squid Proxy server?

                              Is this a new Fibonacci Identity?

                              19世紀