这是该问题的动机:
我在Unity桌面上使用Ubuntu 12.04 LTS 2。在我的.bashrc文件中,我将几个目录附加到PATH变量中,并定义了一些环境变量,例如JAVA_HOME。当我从终端(运行bash,我的默认shell)启动应用程序时,这很好用,但是对于使用Unity启动器的一些快捷方式,它们运行的应用程序似乎被定义为使用#!/ bin / sh,是/ bin / dash的别名,并且它们不会选择〜/ .bashrc或〜/ .profile的内容。
我想我可以将所有这些快捷方式更改为使用/ bin / bash而不是/ bin / sh来强制它获取.bashrc更改,但这似乎确实很hack。
鉴于Ubuntu 12.04(默认情况下)将/ bin / sh别名为/ bin / dash,并且我的默认外壳程序为/ bin / bash,是否有一个地方可以选择修改PATH并定义环境变量(如果需要)在所有这些情况下都存在:
- 每当我创建非登录bash shell时(统一使用终端)
- 每当我创建登录bash shell时(例如,通过ssh远程登录)
- 每当我使用Unity应用程序启动器时(假设启动器使用/ bin / sh)。
- 每当执行cron作业时(假设/ etc / crontab中的SHELL = / bin / sh)。
如果我理解正确,我猜是这样的:
- (1)/(2)和(3)/(4)不同,因为(1)/(2)是bash,而(3)/(4)是破折号。
- (1)和(2)是不同的,因为bash选择加载的文件取决于它是否是登录shell而有所不同。
- (3)和(4)是不同的,因为(3)将在我登录后的某个时刻出现(因此〜/ .profile将由其父进程之一提供,而(4)将在某个时候出现点的时候我我不登录,因此〜/ .profile文件将不会被读取。
(如果其他因素也很重要,例如外壳是否是交互式的,我也不会感到惊讶,因此,我什至没有想到更多的组合……我很高兴提出“改进了我的问题“ 在这种情况下。)
我希望在某个时候,有人一定已经制定了某种指南,告诉您如何/在何处以与外壳程序无关的方式(或至少与破折号/重击兼容的方式)修改环境变量...我只是可以似乎找不到合适的搜索词来找到这样的指南。
解决方案或解决方案的指针,不胜感激!
更新:
- 说明:这是由12.04安装过程创建的默认Ubuntu用户,因此没有什么幻想。它确实有一个〜/ .profile(显式来源〜/ .bashrc),并且仅存在的〜/ .bash *文件是.bashrc,.bash_history和.bash_logout ...所以没有.bash_profile。
- 关于范围重点:我真的不关心不是默认的交互式shell(bash)的,并且发生在使用/ bin / sh的(别名为破折号)任何脚本之外的任何炮弹,所以没有必要与任何复杂这个额外的tcsh / ksh / zsh / etc。支持。