我有一个脚本,使用sh shell。我在使用source命令的行中得到一个错误。它似乎源不包括在我的sh shell。

如果我显式地尝试从shell运行source,我得到:

sh: 1: source: not found

我是否应该安装“source”?我的sh版本是否错误?


当前回答

source是bash内置命令,因此要执行source命令,您可以以Root用户登录。

sudo - s 源。/ filename.sh

其他回答

我在Ubuntu上的gnu Makefile中找到了(其中/bin/sh -> bash)

我需要用。命令,并使用./前缀指定目标脚本(参见下面的示例)

源没有工作在这种情况下,不确定为什么,因为它应该调用/bin/ bash_. .

我的SHELL环境变量也设置为/bin/bash

test:
    $(shell . ./my_script)

注意,这个示例不包括制表符;必须格式化堆栈交换。

你有两个选择,从纯shell切换到bash,启用bash功能,包括source。 https://superuser.com/questions/1220159/bash-prompt-variables-not-working/1764353#1764353

或者使用。而不是用这种形式的源

. ~ / .your_file_name

例如

我们走吧。~ / . bashrc

请考虑在多特和蒂尔达之间留个位置。Tilda指的是主目录,如果你的文件位于主目录上方的某个位置,请使用/中的绝对地址

在Ubuntu上,我没有使用sh scriptname.sh来运行文件,而是使用。Scriptname.sh,它工作了! 我的文件的第一行包含: # !/bin/bash

使用该命令运行脚本

.name_of_script.sh

在Bourne shell(sh)中,使用。命令获取文件的源

. filename

在某些操作系统/环境(Mac OS, Travis-CI, Ubuntu,至少),这必须是:

. ./filename

(以下是Adrien Joly的评论)

源代码是内置的bashism。简单地写成。代替。

e.g.

. $FILE

# OR you may need to use a relative path (such as in an `npm` script):

. ./$FILE

https://wiki.ubuntu.com/DashAsBinSh#source