为什么我不能使用 su -c 明确地获取文件?

为什么我不能使用 su -c 明确地获取文件?

我正在尝试访问susource /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

我发现这些 问题nvminit 代码放入其中/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 $-' ghosthBc

移动nvm该语句上方的行解决了问题,就像将它们放入干净的.profile或中一样.bashrc

相关内容