如何在shell脚本中使用source命令?

whi*_*ear 4 shell sh

我想source在 shell 脚本中使用命令。

我所做的如下所示:

start.sh

source ~/tensorflow/bin/activate
Run Code Online (Sandbox Code Playgroud)

然后在命令行中运行这个脚本。

$sh start.sh
Run Code Online (Sandbox Code Playgroud)

然而什么也没有发生

$which source
Run Code Online (Sandbox Code Playgroud)

命令不显示任何内容。

那么,source是不是正常的命令?

这是错误的想法吗?或者如何减少路径类型?

all*_*tic 5

source是一个 shell内置命令。该which命令在 上查找二进制文件PATH,例如 /usr/bin、/bin、/sbin 等,但您不会在单独的二进制文件中找到任何内置命令。

此外,source在 shell 脚本中使用该命令不会source在您运行它时传播到当前的 shell。sh blah.shwhere blah.shhas sourcein 它实际上不会将文件的内容输入到交互式 shell 中。这不是采购的工作方式。

如果你希望每次打开一个新的 shell 时都发生这个 tensorflow 激活脚本的来源,你需要直接在那里编辑~/.bashrc或 ~/.profile (or other files, depending on what your shell is and how it's configured) and put thesource` 命令。

PS - 你的问题标题很混乱,看起来不完整。花一些时间来编辑、修改和清理您的帖子,否则您可能会冒着有人反对它的风险:P 我很想自己这样做,但我写了一个答案,所以我有点偏见...


小智 5

请使用以下命令:

source start.sh
Run Code Online (Sandbox Code Playgroud)

当我想避免写作时,我遇到了这个问题:

source ~/.bashrc
source activate tensorflow
jupyter notebook
Run Code Online (Sandbox Code Playgroud)

此后,我发现了一个更好地解释这一点的页面:使用“源文件.sh”、“./file.sh”、“sh file.sh”、“. ./file.sh”?在询问 Ubuntu 上。