/bin/sh: pushd: not found

前端 未结 11 645
借酒劲吻你
借酒劲吻你 2020-12-13 11:31

I am doing the following inside a make file

pushd %dir_name%

and i get the following error

/bin/sh : pushd : not foun         


        
相关标签:
11条回答
  • 2020-12-13 12:26

    Note that each line executed by a make file is run in its own shell anyway. If you change directory, it won't affect subsequent lines. So you probably have little use for pushd and popd, your problem is more the opposite, that of getting the directory to stay changed for as long as you need it!

    0 讨论(0)
  • 2020-12-13 12:29

    Your shell (/bin/sh) is trying to find 'pushd'. But it can't find it because 'pushd','popd' and other commands like that are build in bash.

    Launch you script using Bash (/bin/bash) instead of Sh like you are doing now, and it will work

    0 讨论(0)
  • 2020-12-13 12:30

    Synthesizing from the other responses: pushd is bash-specific and you are make is using another POSIX shell. There is a simple workaround to use separate shell for the part that needs different directory, so just try changing it to:

    test -z gen || mkdir -p gen \
     && ( cd $(CURRENT_DIRECTORY)/genscript > /dev/null \
     && perl genmakefile.pl \
     && mv Makefile ../gen/ ) \
     && echo "" > $(CURRENT_DIRECTORY)/gen/SvcGenLog
    

    (I substituted the long path with a variable expansion. I probably is one in the makefile and it clearly expands to the current directory).

    Since you are running it from make, I would probably replace the test with a make rule, too. Just

    gen/SvcGenLog :
        mkdir -p gen
        cd genscript > /dev/null \
         && perl genmakefile.pl \
         && mv Makefile ../gen/ \
        echo "" > gen/SvcGenLog
    

    (dropped the current directory prefix; you were using relative path at some points anyway) And than just make the rule depend on gen/SvcGenLog. It would be a bit more readable and you can make it depend on the genscript/genmakefile.pl too, so the Makefile in gen will be regenerated if you modify the script. Of course if anything else affects the content of the Makefile, you can make the rule depend on that too.

    0 讨论(0)
  • 2020-12-13 12:32

    add

    SHELL := /bin/bash

    at the top of your makefile I have found it on another question How can I use Bash syntax in Makefile targets?

    0 讨论(0)
  • 2020-12-13 12:32
    sudo dpkg-reconfigure dash 
    

    Then select no.

    0 讨论(0)
提交回复
热议问题