我正在尝试访问su
,source /home/ghost/.bashrc
但似乎无法加载内容:
$ su -l -c 'source /home/ghost/.bashrc; nvm' ghost
-su: nvm: command not found
我用没有记录管理 Node 版本。Nvm 通常由用户ghost
在以下位置获取/home/ghost/.bashrc
:
# in /home/ghost/.bashrc
export NVM_DIR="/home/ghost/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
我发现这些 问题将nvm
init 代码放入其中/home/ghost/.profile
使其nvm
可用,su -l
因为它会启动一个登录 shell。
我还是不明白为什么我不能source
明确地获取该文件。谁能告诉我为什么?
答案1
文件曾是获取源,但当到达该case
语句时执行被停止,只有在交互模式下在 shell 中获取源时执行才会继续。
case $- in
*i*) ;;
*) return;;
esac
该变量$-
表示当前 shell 初始化时使用的标志。如果未看到i
(交互模式标志),代码将返回。由于 shell 未在交互模式下运行,因此source .bashrc
在到达该case
语句时停止。
echo $-
作为参考,使用普通交互式 shell 时的输出是 。但是,himBH
的输出我看到。su -l -c 'echo $-' ghost
hBc
移动nvm
该语句上方的行解决了问题,就像将它们放入干净的.profile
或中一样.bashrc
。