re-use '~/.profile` for Fish?











up vote
25
down vote

favorite
9












(I'm talking about the shell Fish, esp. Fish's Fish.)



For Bash/ZSH, I had ~/.profile with some exports, aliases and other stuff.



I don't want to have a separate config for environment variables for Fish, I want to re-use my ~/.profile. How?



In The FAQ, it is stated that I can at least import those via /usr/local/share/fish/tools/import_bash_settings.py, however I don't really like running that for each Fish-instance.










share|improve this question


























    up vote
    25
    down vote

    favorite
    9












    (I'm talking about the shell Fish, esp. Fish's Fish.)



    For Bash/ZSH, I had ~/.profile with some exports, aliases and other stuff.



    I don't want to have a separate config for environment variables for Fish, I want to re-use my ~/.profile. How?



    In The FAQ, it is stated that I can at least import those via /usr/local/share/fish/tools/import_bash_settings.py, however I don't really like running that for each Fish-instance.










    share|improve this question
























      up vote
      25
      down vote

      favorite
      9









      up vote
      25
      down vote

      favorite
      9






      9





      (I'm talking about the shell Fish, esp. Fish's Fish.)



      For Bash/ZSH, I had ~/.profile with some exports, aliases and other stuff.



      I don't want to have a separate config for environment variables for Fish, I want to re-use my ~/.profile. How?



      In The FAQ, it is stated that I can at least import those via /usr/local/share/fish/tools/import_bash_settings.py, however I don't really like running that for each Fish-instance.










      share|improve this question













      (I'm talking about the shell Fish, esp. Fish's Fish.)



      For Bash/ZSH, I had ~/.profile with some exports, aliases and other stuff.



      I don't want to have a separate config for environment variables for Fish, I want to re-use my ~/.profile. How?



      In The FAQ, it is stated that I can at least import those via /usr/local/share/fish/tools/import_bash_settings.py, however I don't really like running that for each Fish-instance.







      shell .profile fish






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jul 10 '12 at 2:41









      Albert

      2,77963043




      2,77963043






















          9 Answers
          9






          active

          oldest

          votes

















          up vote
          18
          down vote













          You can use Bash to parse /etc/profile and ~/.profile, and then start fish.





          1. Create /usr/local/bin/fishlogin with contents



            #!/bin/bash -l
            exec -l fish "$@"



          2. Make it executable



            sudo chmod +x /usr/local/bin/fishlogin



          3. Add it to /etc/shells



            echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells



          4. Set it as your default shell



            sudo usermod -s /usr/local/bin/fishlogin $USER







          share|improve this answer























          • So elegant! Should be the accepted answer IMO
            – yonix
            Mar 22 '17 at 8:11






          • 2




            Just in case anyone is wondering, the mac equivalent of usermod -s /usr/local/bin/fishlogin $USER is chsh -s /usr/local/fishlogin $USER
            – gloriphobia
            May 10 '17 at 9:52






          • 1




            If you get chsh: /usr/local/bin/fishlogin: non-standard shell need to add it to /etc/shells
            – Ben Marten
            Jun 3 '17 at 22:06








          • 1




            To fully imitate launching fish directly, fish "$@" should be replaced with exec -l fish "$@". exec replaces the bash process with fish, while -l causes that argv[0] for fish is -fish, which signals that this is a login shell.
            – azag0
            Feb 12 at 10:28






          • 1




            @Sz. Well, nope. Fish does not support subshells in the first place. And even if it did, it would not do so by executing your login shell, so no Bash would be spawned then.
            – Noé Rubinstein
            Oct 3 at 11:12


















          up vote
          14
          down vote



          accepted










          My current solution (see here for a maybe more recent version):



          egrep "^export " ~/.profile | while read e
          set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/1/")
          set value (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/2/")

          # remove surrounding quotes if existing
          set value (echo $value | sed -E "s/^"(.*)"$/1/")

          if test $var = "PATH"
          # replace ":" by spaces. this is how PATH looks for Fish
          set value (echo $value | sed -E "s/:/ /g")

          # use eval because we need to expand the value
          eval set -xg $var $value

          continue
          end

          # evaluate variables. we can use eval because we most likely just used "$var"
          set value (eval echo $value)

          set -xg $var $value
          end





          share|improve this answer

















          • 3




            can you explain what this does?
            – max pleaner
            Jan 13 '17 at 18:00










          • @maxpleaner AFAICT it looks through .profile for export statements and executes them as fish sets. It's kinda hacky, but clever.
            – Jared Smith
            Oct 9 at 13:40


















          up vote
          7
          down vote













          For a much cleaner solution, you can use the foreign env plugin:



          fenv source ~/.profile





          share|improve this answer

















          • 3




            This should be the accepted solution. You could elaborate (install omf)
            – Jules Randolph
            Apr 18 at 20:36




















          up vote
          3
          down vote













          I tried sourcing .profile on fish startup and it worked like a charm for me.



          just do :



          echo 'source ~/.profile;clear;' >  ~/.config/fish/config.fish


          Restart terminal or iterm2, test an alias from .profile to test.



          Note : Won't work with more complex .profile files that use syntax not available in fish - credit @erb






          share|improve this answer























          • Worked for me too! Running MacOSX.
            – Alexar
            Dec 6 '15 at 3:33










          • Won't work with more complex .profile files that use syntax not available in fish.
            – erb
            Oct 6 '16 at 10:12








          • 1




            @erb I agree with you, I added the caveat in the answer.
            – Eswar Rajesh Pinapala
            Oct 6 '16 at 22:54




















          up vote
          2
          down vote













          Install dash and add this line to your config.fish:



          env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source





          share|improve this answer






























            up vote
            1
            down vote













            You can't. fish's syntax is too different from Bourne shell (/bin/sh) syntax. This is the same reason you can't use .profile with other non-Bourne-derived shells, such as csh and tcsh.






            share|improve this answer





















            • I don't want to fully execute .profile. I just want to get all exports from there. One easy way would be to egrep "^export" which would be good enough already for me. Another, more correct solution would be this. Also, I e.g. could run this import_bash_settings.py script which probably does something similar. So, there are obviously many ways to do this. With my question here, I was wondering how others have solved this.
              – Albert
              Jul 11 '12 at 14:18


















            up vote
            1
            down vote













            If your distribution uses PAM, you could set your environment variables in your ~/.pam_environment file.






            share|improve this answer




























              up vote
              1
              down vote













              You can start Fish from Bash. If you do that, Fish will inherit all environment variables (export FOO=bar) from Bash. At this point, Bash will have already read your .profile (or the like).



              bash-3.2$ export TEST="test"
              bash-3.2$ fish
              cmey@MBP ~> echo $TEST
              test





              share|improve this answer




























                up vote
                0
                down vote













                Why don't you just put in your config.fish this:



                bass source ~/.profile


                bass is a plugin to execute bash commands in fish.






                share|improve this answer





















                  Your Answer








                  StackExchange.ready(function() {
                  var channelOptions = {
                  tags: "".split(" "),
                  id: "3"
                  };
                  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',
                  convertImagesToLinks: true,
                  noModals: true,
                  showLowRepImageUploadWarning: true,
                  reputationToPostImages: 10,
                  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%2fsuperuser.com%2fquestions%2f446925%2fre-use-profile-for-fish%23new-answer', 'question_page');
                  }
                  );

                  Post as a guest















                  Required, but never shown

























                  9 Answers
                  9






                  active

                  oldest

                  votes








                  9 Answers
                  9






                  active

                  oldest

                  votes









                  active

                  oldest

                  votes






                  active

                  oldest

                  votes








                  up vote
                  18
                  down vote













                  You can use Bash to parse /etc/profile and ~/.profile, and then start fish.





                  1. Create /usr/local/bin/fishlogin with contents



                    #!/bin/bash -l
                    exec -l fish "$@"



                  2. Make it executable



                    sudo chmod +x /usr/local/bin/fishlogin



                  3. Add it to /etc/shells



                    echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells



                  4. Set it as your default shell



                    sudo usermod -s /usr/local/bin/fishlogin $USER







                  share|improve this answer























                  • So elegant! Should be the accepted answer IMO
                    – yonix
                    Mar 22 '17 at 8:11






                  • 2




                    Just in case anyone is wondering, the mac equivalent of usermod -s /usr/local/bin/fishlogin $USER is chsh -s /usr/local/fishlogin $USER
                    – gloriphobia
                    May 10 '17 at 9:52






                  • 1




                    If you get chsh: /usr/local/bin/fishlogin: non-standard shell need to add it to /etc/shells
                    – Ben Marten
                    Jun 3 '17 at 22:06








                  • 1




                    To fully imitate launching fish directly, fish "$@" should be replaced with exec -l fish "$@". exec replaces the bash process with fish, while -l causes that argv[0] for fish is -fish, which signals that this is a login shell.
                    – azag0
                    Feb 12 at 10:28






                  • 1




                    @Sz. Well, nope. Fish does not support subshells in the first place. And even if it did, it would not do so by executing your login shell, so no Bash would be spawned then.
                    – Noé Rubinstein
                    Oct 3 at 11:12















                  up vote
                  18
                  down vote













                  You can use Bash to parse /etc/profile and ~/.profile, and then start fish.





                  1. Create /usr/local/bin/fishlogin with contents



                    #!/bin/bash -l
                    exec -l fish "$@"



                  2. Make it executable



                    sudo chmod +x /usr/local/bin/fishlogin



                  3. Add it to /etc/shells



                    echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells



                  4. Set it as your default shell



                    sudo usermod -s /usr/local/bin/fishlogin $USER







                  share|improve this answer























                  • So elegant! Should be the accepted answer IMO
                    – yonix
                    Mar 22 '17 at 8:11






                  • 2




                    Just in case anyone is wondering, the mac equivalent of usermod -s /usr/local/bin/fishlogin $USER is chsh -s /usr/local/fishlogin $USER
                    – gloriphobia
                    May 10 '17 at 9:52






                  • 1




                    If you get chsh: /usr/local/bin/fishlogin: non-standard shell need to add it to /etc/shells
                    – Ben Marten
                    Jun 3 '17 at 22:06








                  • 1




                    To fully imitate launching fish directly, fish "$@" should be replaced with exec -l fish "$@". exec replaces the bash process with fish, while -l causes that argv[0] for fish is -fish, which signals that this is a login shell.
                    – azag0
                    Feb 12 at 10:28






                  • 1




                    @Sz. Well, nope. Fish does not support subshells in the first place. And even if it did, it would not do so by executing your login shell, so no Bash would be spawned then.
                    – Noé Rubinstein
                    Oct 3 at 11:12













                  up vote
                  18
                  down vote










                  up vote
                  18
                  down vote









                  You can use Bash to parse /etc/profile and ~/.profile, and then start fish.





                  1. Create /usr/local/bin/fishlogin with contents



                    #!/bin/bash -l
                    exec -l fish "$@"



                  2. Make it executable



                    sudo chmod +x /usr/local/bin/fishlogin



                  3. Add it to /etc/shells



                    echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells



                  4. Set it as your default shell



                    sudo usermod -s /usr/local/bin/fishlogin $USER







                  share|improve this answer














                  You can use Bash to parse /etc/profile and ~/.profile, and then start fish.





                  1. Create /usr/local/bin/fishlogin with contents



                    #!/bin/bash -l
                    exec -l fish "$@"



                  2. Make it executable



                    sudo chmod +x /usr/local/bin/fishlogin



                  3. Add it to /etc/shells



                    echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells



                  4. Set it as your default shell



                    sudo usermod -s /usr/local/bin/fishlogin $USER








                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Feb 28 at 17:14

























                  answered Feb 29 '16 at 15:50









                  Noé Rubinstein

                  28025




                  28025












                  • So elegant! Should be the accepted answer IMO
                    – yonix
                    Mar 22 '17 at 8:11






                  • 2




                    Just in case anyone is wondering, the mac equivalent of usermod -s /usr/local/bin/fishlogin $USER is chsh -s /usr/local/fishlogin $USER
                    – gloriphobia
                    May 10 '17 at 9:52






                  • 1




                    If you get chsh: /usr/local/bin/fishlogin: non-standard shell need to add it to /etc/shells
                    – Ben Marten
                    Jun 3 '17 at 22:06








                  • 1




                    To fully imitate launching fish directly, fish "$@" should be replaced with exec -l fish "$@". exec replaces the bash process with fish, while -l causes that argv[0] for fish is -fish, which signals that this is a login shell.
                    – azag0
                    Feb 12 at 10:28






                  • 1




                    @Sz. Well, nope. Fish does not support subshells in the first place. And even if it did, it would not do so by executing your login shell, so no Bash would be spawned then.
                    – Noé Rubinstein
                    Oct 3 at 11:12


















                  • So elegant! Should be the accepted answer IMO
                    – yonix
                    Mar 22 '17 at 8:11






                  • 2




                    Just in case anyone is wondering, the mac equivalent of usermod -s /usr/local/bin/fishlogin $USER is chsh -s /usr/local/fishlogin $USER
                    – gloriphobia
                    May 10 '17 at 9:52






                  • 1




                    If you get chsh: /usr/local/bin/fishlogin: non-standard shell need to add it to /etc/shells
                    – Ben Marten
                    Jun 3 '17 at 22:06








                  • 1




                    To fully imitate launching fish directly, fish "$@" should be replaced with exec -l fish "$@". exec replaces the bash process with fish, while -l causes that argv[0] for fish is -fish, which signals that this is a login shell.
                    – azag0
                    Feb 12 at 10:28






                  • 1




                    @Sz. Well, nope. Fish does not support subshells in the first place. And even if it did, it would not do so by executing your login shell, so no Bash would be spawned then.
                    – Noé Rubinstein
                    Oct 3 at 11:12
















                  So elegant! Should be the accepted answer IMO
                  – yonix
                  Mar 22 '17 at 8:11




                  So elegant! Should be the accepted answer IMO
                  – yonix
                  Mar 22 '17 at 8:11




                  2




                  2




                  Just in case anyone is wondering, the mac equivalent of usermod -s /usr/local/bin/fishlogin $USER is chsh -s /usr/local/fishlogin $USER
                  – gloriphobia
                  May 10 '17 at 9:52




                  Just in case anyone is wondering, the mac equivalent of usermod -s /usr/local/bin/fishlogin $USER is chsh -s /usr/local/fishlogin $USER
                  – gloriphobia
                  May 10 '17 at 9:52




                  1




                  1




                  If you get chsh: /usr/local/bin/fishlogin: non-standard shell need to add it to /etc/shells
                  – Ben Marten
                  Jun 3 '17 at 22:06






                  If you get chsh: /usr/local/bin/fishlogin: non-standard shell need to add it to /etc/shells
                  – Ben Marten
                  Jun 3 '17 at 22:06






                  1




                  1




                  To fully imitate launching fish directly, fish "$@" should be replaced with exec -l fish "$@". exec replaces the bash process with fish, while -l causes that argv[0] for fish is -fish, which signals that this is a login shell.
                  – azag0
                  Feb 12 at 10:28




                  To fully imitate launching fish directly, fish "$@" should be replaced with exec -l fish "$@". exec replaces the bash process with fish, while -l causes that argv[0] for fish is -fish, which signals that this is a login shell.
                  – azag0
                  Feb 12 at 10:28




                  1




                  1




                  @Sz. Well, nope. Fish does not support subshells in the first place. And even if it did, it would not do so by executing your login shell, so no Bash would be spawned then.
                  – Noé Rubinstein
                  Oct 3 at 11:12




                  @Sz. Well, nope. Fish does not support subshells in the first place. And even if it did, it would not do so by executing your login shell, so no Bash would be spawned then.
                  – Noé Rubinstein
                  Oct 3 at 11:12












                  up vote
                  14
                  down vote



                  accepted










                  My current solution (see here for a maybe more recent version):



                  egrep "^export " ~/.profile | while read e
                  set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/1/")
                  set value (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/2/")

                  # remove surrounding quotes if existing
                  set value (echo $value | sed -E "s/^"(.*)"$/1/")

                  if test $var = "PATH"
                  # replace ":" by spaces. this is how PATH looks for Fish
                  set value (echo $value | sed -E "s/:/ /g")

                  # use eval because we need to expand the value
                  eval set -xg $var $value

                  continue
                  end

                  # evaluate variables. we can use eval because we most likely just used "$var"
                  set value (eval echo $value)

                  set -xg $var $value
                  end





                  share|improve this answer

















                  • 3




                    can you explain what this does?
                    – max pleaner
                    Jan 13 '17 at 18:00










                  • @maxpleaner AFAICT it looks through .profile for export statements and executes them as fish sets. It's kinda hacky, but clever.
                    – Jared Smith
                    Oct 9 at 13:40















                  up vote
                  14
                  down vote



                  accepted










                  My current solution (see here for a maybe more recent version):



                  egrep "^export " ~/.profile | while read e
                  set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/1/")
                  set value (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/2/")

                  # remove surrounding quotes if existing
                  set value (echo $value | sed -E "s/^"(.*)"$/1/")

                  if test $var = "PATH"
                  # replace ":" by spaces. this is how PATH looks for Fish
                  set value (echo $value | sed -E "s/:/ /g")

                  # use eval because we need to expand the value
                  eval set -xg $var $value

                  continue
                  end

                  # evaluate variables. we can use eval because we most likely just used "$var"
                  set value (eval echo $value)

                  set -xg $var $value
                  end





                  share|improve this answer

















                  • 3




                    can you explain what this does?
                    – max pleaner
                    Jan 13 '17 at 18:00










                  • @maxpleaner AFAICT it looks through .profile for export statements and executes them as fish sets. It's kinda hacky, but clever.
                    – Jared Smith
                    Oct 9 at 13:40













                  up vote
                  14
                  down vote



                  accepted







                  up vote
                  14
                  down vote



                  accepted






                  My current solution (see here for a maybe more recent version):



                  egrep "^export " ~/.profile | while read e
                  set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/1/")
                  set value (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/2/")

                  # remove surrounding quotes if existing
                  set value (echo $value | sed -E "s/^"(.*)"$/1/")

                  if test $var = "PATH"
                  # replace ":" by spaces. this is how PATH looks for Fish
                  set value (echo $value | sed -E "s/:/ /g")

                  # use eval because we need to expand the value
                  eval set -xg $var $value

                  continue
                  end

                  # evaluate variables. we can use eval because we most likely just used "$var"
                  set value (eval echo $value)

                  set -xg $var $value
                  end





                  share|improve this answer












                  My current solution (see here for a maybe more recent version):



                  egrep "^export " ~/.profile | while read e
                  set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/1/")
                  set value (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)$/2/")

                  # remove surrounding quotes if existing
                  set value (echo $value | sed -E "s/^"(.*)"$/1/")

                  if test $var = "PATH"
                  # replace ":" by spaces. this is how PATH looks for Fish
                  set value (echo $value | sed -E "s/:/ /g")

                  # use eval because we need to expand the value
                  eval set -xg $var $value

                  continue
                  end

                  # evaluate variables. we can use eval because we most likely just used "$var"
                  set value (eval echo $value)

                  set -xg $var $value
                  end






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Jul 11 '12 at 19:31









                  Albert

                  2,77963043




                  2,77963043








                  • 3




                    can you explain what this does?
                    – max pleaner
                    Jan 13 '17 at 18:00










                  • @maxpleaner AFAICT it looks through .profile for export statements and executes them as fish sets. It's kinda hacky, but clever.
                    – Jared Smith
                    Oct 9 at 13:40














                  • 3




                    can you explain what this does?
                    – max pleaner
                    Jan 13 '17 at 18:00










                  • @maxpleaner AFAICT it looks through .profile for export statements and executes them as fish sets. It's kinda hacky, but clever.
                    – Jared Smith
                    Oct 9 at 13:40








                  3




                  3




                  can you explain what this does?
                  – max pleaner
                  Jan 13 '17 at 18:00




                  can you explain what this does?
                  – max pleaner
                  Jan 13 '17 at 18:00












                  @maxpleaner AFAICT it looks through .profile for export statements and executes them as fish sets. It's kinda hacky, but clever.
                  – Jared Smith
                  Oct 9 at 13:40




                  @maxpleaner AFAICT it looks through .profile for export statements and executes them as fish sets. It's kinda hacky, but clever.
                  – Jared Smith
                  Oct 9 at 13:40










                  up vote
                  7
                  down vote













                  For a much cleaner solution, you can use the foreign env plugin:



                  fenv source ~/.profile





                  share|improve this answer

















                  • 3




                    This should be the accepted solution. You could elaborate (install omf)
                    – Jules Randolph
                    Apr 18 at 20:36

















                  up vote
                  7
                  down vote













                  For a much cleaner solution, you can use the foreign env plugin:



                  fenv source ~/.profile





                  share|improve this answer

















                  • 3




                    This should be the accepted solution. You could elaborate (install omf)
                    – Jules Randolph
                    Apr 18 at 20:36















                  up vote
                  7
                  down vote










                  up vote
                  7
                  down vote









                  For a much cleaner solution, you can use the foreign env plugin:



                  fenv source ~/.profile





                  share|improve this answer












                  For a much cleaner solution, you can use the foreign env plugin:



                  fenv source ~/.profile






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Jan 2 '17 at 15:35









                  jgillich

                  4951719




                  4951719








                  • 3




                    This should be the accepted solution. You could elaborate (install omf)
                    – Jules Randolph
                    Apr 18 at 20:36
















                  • 3




                    This should be the accepted solution. You could elaborate (install omf)
                    – Jules Randolph
                    Apr 18 at 20:36










                  3




                  3




                  This should be the accepted solution. You could elaborate (install omf)
                  – Jules Randolph
                  Apr 18 at 20:36






                  This should be the accepted solution. You could elaborate (install omf)
                  – Jules Randolph
                  Apr 18 at 20:36












                  up vote
                  3
                  down vote













                  I tried sourcing .profile on fish startup and it worked like a charm for me.



                  just do :



                  echo 'source ~/.profile;clear;' >  ~/.config/fish/config.fish


                  Restart terminal or iterm2, test an alias from .profile to test.



                  Note : Won't work with more complex .profile files that use syntax not available in fish - credit @erb






                  share|improve this answer























                  • Worked for me too! Running MacOSX.
                    – Alexar
                    Dec 6 '15 at 3:33










                  • Won't work with more complex .profile files that use syntax not available in fish.
                    – erb
                    Oct 6 '16 at 10:12








                  • 1




                    @erb I agree with you, I added the caveat in the answer.
                    – Eswar Rajesh Pinapala
                    Oct 6 '16 at 22:54

















                  up vote
                  3
                  down vote













                  I tried sourcing .profile on fish startup and it worked like a charm for me.



                  just do :



                  echo 'source ~/.profile;clear;' >  ~/.config/fish/config.fish


                  Restart terminal or iterm2, test an alias from .profile to test.



                  Note : Won't work with more complex .profile files that use syntax not available in fish - credit @erb






                  share|improve this answer























                  • Worked for me too! Running MacOSX.
                    – Alexar
                    Dec 6 '15 at 3:33










                  • Won't work with more complex .profile files that use syntax not available in fish.
                    – erb
                    Oct 6 '16 at 10:12








                  • 1




                    @erb I agree with you, I added the caveat in the answer.
                    – Eswar Rajesh Pinapala
                    Oct 6 '16 at 22:54















                  up vote
                  3
                  down vote










                  up vote
                  3
                  down vote









                  I tried sourcing .profile on fish startup and it worked like a charm for me.



                  just do :



                  echo 'source ~/.profile;clear;' >  ~/.config/fish/config.fish


                  Restart terminal or iterm2, test an alias from .profile to test.



                  Note : Won't work with more complex .profile files that use syntax not available in fish - credit @erb






                  share|improve this answer














                  I tried sourcing .profile on fish startup and it worked like a charm for me.



                  just do :



                  echo 'source ~/.profile;clear;' >  ~/.config/fish/config.fish


                  Restart terminal or iterm2, test an alias from .profile to test.



                  Note : Won't work with more complex .profile files that use syntax not available in fish - credit @erb







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Oct 6 '16 at 22:53

























                  answered Oct 5 '15 at 5:47









                  Eswar Rajesh Pinapala

                  1614




                  1614












                  • Worked for me too! Running MacOSX.
                    – Alexar
                    Dec 6 '15 at 3:33










                  • Won't work with more complex .profile files that use syntax not available in fish.
                    – erb
                    Oct 6 '16 at 10:12








                  • 1




                    @erb I agree with you, I added the caveat in the answer.
                    – Eswar Rajesh Pinapala
                    Oct 6 '16 at 22:54




















                  • Worked for me too! Running MacOSX.
                    – Alexar
                    Dec 6 '15 at 3:33










                  • Won't work with more complex .profile files that use syntax not available in fish.
                    – erb
                    Oct 6 '16 at 10:12








                  • 1




                    @erb I agree with you, I added the caveat in the answer.
                    – Eswar Rajesh Pinapala
                    Oct 6 '16 at 22:54


















                  Worked for me too! Running MacOSX.
                  – Alexar
                  Dec 6 '15 at 3:33




                  Worked for me too! Running MacOSX.
                  – Alexar
                  Dec 6 '15 at 3:33












                  Won't work with more complex .profile files that use syntax not available in fish.
                  – erb
                  Oct 6 '16 at 10:12






                  Won't work with more complex .profile files that use syntax not available in fish.
                  – erb
                  Oct 6 '16 at 10:12






                  1




                  1




                  @erb I agree with you, I added the caveat in the answer.
                  – Eswar Rajesh Pinapala
                  Oct 6 '16 at 22:54






                  @erb I agree with you, I added the caveat in the answer.
                  – Eswar Rajesh Pinapala
                  Oct 6 '16 at 22:54












                  up vote
                  2
                  down vote













                  Install dash and add this line to your config.fish:



                  env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source





                  share|improve this answer



























                    up vote
                    2
                    down vote













                    Install dash and add this line to your config.fish:



                    env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source





                    share|improve this answer

























                      up vote
                      2
                      down vote










                      up vote
                      2
                      down vote









                      Install dash and add this line to your config.fish:



                      env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source





                      share|improve this answer














                      Install dash and add this line to your config.fish:



                      env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source






                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited Sep 11 '15 at 9:24

























                      answered Sep 5 '15 at 17:42









                      Yegorius

                      192




                      192






















                          up vote
                          1
                          down vote













                          You can't. fish's syntax is too different from Bourne shell (/bin/sh) syntax. This is the same reason you can't use .profile with other non-Bourne-derived shells, such as csh and tcsh.






                          share|improve this answer





















                          • I don't want to fully execute .profile. I just want to get all exports from there. One easy way would be to egrep "^export" which would be good enough already for me. Another, more correct solution would be this. Also, I e.g. could run this import_bash_settings.py script which probably does something similar. So, there are obviously many ways to do this. With my question here, I was wondering how others have solved this.
                            – Albert
                            Jul 11 '12 at 14:18















                          up vote
                          1
                          down vote













                          You can't. fish's syntax is too different from Bourne shell (/bin/sh) syntax. This is the same reason you can't use .profile with other non-Bourne-derived shells, such as csh and tcsh.






                          share|improve this answer





















                          • I don't want to fully execute .profile. I just want to get all exports from there. One easy way would be to egrep "^export" which would be good enough already for me. Another, more correct solution would be this. Also, I e.g. could run this import_bash_settings.py script which probably does something similar. So, there are obviously many ways to do this. With my question here, I was wondering how others have solved this.
                            – Albert
                            Jul 11 '12 at 14:18













                          up vote
                          1
                          down vote










                          up vote
                          1
                          down vote









                          You can't. fish's syntax is too different from Bourne shell (/bin/sh) syntax. This is the same reason you can't use .profile with other non-Bourne-derived shells, such as csh and tcsh.






                          share|improve this answer












                          You can't. fish's syntax is too different from Bourne shell (/bin/sh) syntax. This is the same reason you can't use .profile with other non-Bourne-derived shells, such as csh and tcsh.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Jul 10 '12 at 6:58









                          Spiff

                          76.1k10116158




                          76.1k10116158












                          • I don't want to fully execute .profile. I just want to get all exports from there. One easy way would be to egrep "^export" which would be good enough already for me. Another, more correct solution would be this. Also, I e.g. could run this import_bash_settings.py script which probably does something similar. So, there are obviously many ways to do this. With my question here, I was wondering how others have solved this.
                            – Albert
                            Jul 11 '12 at 14:18


















                          • I don't want to fully execute .profile. I just want to get all exports from there. One easy way would be to egrep "^export" which would be good enough already for me. Another, more correct solution would be this. Also, I e.g. could run this import_bash_settings.py script which probably does something similar. So, there are obviously many ways to do this. With my question here, I was wondering how others have solved this.
                            – Albert
                            Jul 11 '12 at 14:18
















                          I don't want to fully execute .profile. I just want to get all exports from there. One easy way would be to egrep "^export" which would be good enough already for me. Another, more correct solution would be this. Also, I e.g. could run this import_bash_settings.py script which probably does something similar. So, there are obviously many ways to do this. With my question here, I was wondering how others have solved this.
                          – Albert
                          Jul 11 '12 at 14:18




                          I don't want to fully execute .profile. I just want to get all exports from there. One easy way would be to egrep "^export" which would be good enough already for me. Another, more correct solution would be this. Also, I e.g. could run this import_bash_settings.py script which probably does something similar. So, there are obviously many ways to do this. With my question here, I was wondering how others have solved this.
                          – Albert
                          Jul 11 '12 at 14:18










                          up vote
                          1
                          down vote













                          If your distribution uses PAM, you could set your environment variables in your ~/.pam_environment file.






                          share|improve this answer

























                            up vote
                            1
                            down vote













                            If your distribution uses PAM, you could set your environment variables in your ~/.pam_environment file.






                            share|improve this answer























                              up vote
                              1
                              down vote










                              up vote
                              1
                              down vote









                              If your distribution uses PAM, you could set your environment variables in your ~/.pam_environment file.






                              share|improve this answer












                              If your distribution uses PAM, you could set your environment variables in your ~/.pam_environment file.







                              share|improve this answer












                              share|improve this answer



                              share|improve this answer










                              answered Jan 5 '15 at 4:55









                              kzh

                              2,20362231




                              2,20362231






















                                  up vote
                                  1
                                  down vote













                                  You can start Fish from Bash. If you do that, Fish will inherit all environment variables (export FOO=bar) from Bash. At this point, Bash will have already read your .profile (or the like).



                                  bash-3.2$ export TEST="test"
                                  bash-3.2$ fish
                                  cmey@MBP ~> echo $TEST
                                  test





                                  share|improve this answer

























                                    up vote
                                    1
                                    down vote













                                    You can start Fish from Bash. If you do that, Fish will inherit all environment variables (export FOO=bar) from Bash. At this point, Bash will have already read your .profile (or the like).



                                    bash-3.2$ export TEST="test"
                                    bash-3.2$ fish
                                    cmey@MBP ~> echo $TEST
                                    test





                                    share|improve this answer























                                      up vote
                                      1
                                      down vote










                                      up vote
                                      1
                                      down vote









                                      You can start Fish from Bash. If you do that, Fish will inherit all environment variables (export FOO=bar) from Bash. At this point, Bash will have already read your .profile (or the like).



                                      bash-3.2$ export TEST="test"
                                      bash-3.2$ fish
                                      cmey@MBP ~> echo $TEST
                                      test





                                      share|improve this answer












                                      You can start Fish from Bash. If you do that, Fish will inherit all environment variables (export FOO=bar) from Bash. At this point, Bash will have already read your .profile (or the like).



                                      bash-3.2$ export TEST="test"
                                      bash-3.2$ fish
                                      cmey@MBP ~> echo $TEST
                                      test






                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered Aug 28 '15 at 12:40









                                      cmey

                                      111




                                      111






















                                          up vote
                                          0
                                          down vote













                                          Why don't you just put in your config.fish this:



                                          bass source ~/.profile


                                          bass is a plugin to execute bash commands in fish.






                                          share|improve this answer

























                                            up vote
                                            0
                                            down vote













                                            Why don't you just put in your config.fish this:



                                            bass source ~/.profile


                                            bass is a plugin to execute bash commands in fish.






                                            share|improve this answer























                                              up vote
                                              0
                                              down vote










                                              up vote
                                              0
                                              down vote









                                              Why don't you just put in your config.fish this:



                                              bass source ~/.profile


                                              bass is a plugin to execute bash commands in fish.






                                              share|improve this answer












                                              Why don't you just put in your config.fish this:



                                              bass source ~/.profile


                                              bass is a plugin to execute bash commands in fish.







                                              share|improve this answer












                                              share|improve this answer



                                              share|improve this answer










                                              answered Nov 26 at 18:01









                                              rsalmei

                                              1




                                              1






























                                                  draft saved

                                                  draft discarded




















































                                                  Thanks for contributing an answer to Super User!


                                                  • 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%2fsuperuser.com%2fquestions%2f446925%2fre-use-profile-for-fish%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

                                                  flock() on closed filehandle LOCK_FILE at /usr/bin/apt-mirror

                                                  Mangá

                                                   ⁒  ․,‪⁊‑⁙ ⁖, ⁇‒※‌, †,⁖‗‌⁝    ‾‸⁘,‖⁔⁣,⁂‾
”‑,‥–,‬ ,⁀‹⁋‴⁑ ‒ ,‴⁋”‼ ⁨,‷⁔„ ‰′,‐‚ ‥‡‎“‷⁃⁨⁅⁣,⁔
⁇‘⁔⁡⁏⁌⁡‿‶‏⁨ ⁣⁕⁖⁨⁩⁥‽⁀  ‴‬⁜‟ ⁃‣‧⁕‮ …‍⁨‴ ⁩,⁚⁖‫ ,‵ ⁀,‮⁝‣‣ ⁑  ⁂– ․, ‾‽ ‏⁁“⁗‸ ‾… ‹‡⁌⁎‸‘ ‡⁏⁌‪ ‵⁛ ‎⁨ ―⁦⁤⁄⁕