В zsh подоболочка, созданная в круглых скобках, может иметь исходный файл rcfile для использования команд, которые могут быть псевдонимами, которые доступны только при добавлении определенных каталогов в PATH и т. Д .:

~ » /bin/zsh -c "workon"
zsh:1: command not found: workon
------------------------------------------------------------
~ » /bin/zsh -c "source ~/.zshrc; workon"
env1
env2
env3
... (expected output)

Однако с bash это не так:

~ » /bin/bash -c "workon"
/bin/bash: workon: command not found
------------------------------------------------------------
~ » /bin/bash -c "source ~/.bashrc; workon"
/bin/bash: workon: command not found
------------------------------------------------------------
~ » bash
sean@helium:~$ workon
env1
env2
env3
... (expected output)

Есть ли какой-нибудь способ, которым bash subshell может создать rcfile?


Чтобы получить преимущество в ответах «проблема XY», это для скрипта, вызываемого in:

#!/bin/zsh
(source ~/.zshrc; cd $1; ${@:2})

У меня есть каталог , полные проекты ( с использованием Git) , где я часто забываю , если я оставил ничего незавершенного, так что in позволяет мне быстро писать $ in ProjectDir/ git status а не $ (cd ProjectDir; git status) (бывший чувствует легче набрать, чем последний).

Желательно, чтобы этот скрипт можно было использовать с bash (именно поэтому я и спрашиваю, хотя в настоящее время он работает с zsh).

1 ответ1

1

В моем Kubuntu первое, что делает .bashrc , это:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Я думаю, что ваш .bashrc похож. Вот почему /bin/bash -c "source ~/.bashrc; …" "не" source. Если бы вы использовали bash -i -c … тогда .bashrc будет получен автоматически, и ваш source будет анализировать его без необходимости во второй раз.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .