Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在sh shell中找不到源命令_Bash_Shell_Sh - Fatal编程技术网

Bash 在sh shell中找不到源命令

Bash 在sh shell中找不到源命令,bash,shell,sh,Bash,Shell,Sh,我有一个使用shshell的脚本。我在使用source命令的行中得到一个错误。我的shshell中似乎没有包含source 如果我明确尝试从shell运行source,我会得到: sh: 1: source: not found 我应该安装“源代码”吗?我是否有错误版本的sh?在Bourne shell(sh)中,请使用。源文件的命令 . filename source命令内置于一些shell中。如果您有脚本,它应该在第一行指定要使用的shell,例如: #!/bin/bash /bin/

我有一个使用
sh
shell的脚本。我在使用
source
命令的行中得到一个错误。我的
sh
shell中似乎没有包含
source

如果我明确尝试从shell运行
source
,我会得到:

sh: 1: source: not found
我应该安装“源代码”吗?我是否有错误版本的
sh

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

. filename

source
命令内置于一些shell中。如果您有脚本,它应该在第一行指定要使用的shell,例如:

#!/bin/bash

/bin/sh
通常是其他一些shell试图模仿shell。许多发行版将
/bin/bash
用于
sh
,它支持
source
。但在Ubuntu上,使用了不支持源代码的
/bin/dash
。大多数shell使用
而不是
源代码。如果无法编辑脚本,请尝试更改运行脚本的shell

$ls -l `which sh`
/bin/sh -> dash

$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]

$ls -l `which sh`
/bin/sh -> bash
然后就可以了

Bourne shell(sh)使用路径在
源中定位。如果您试图源的文件不在您的路径中,则会出现错误“未找到文件”

尝试:

源代码/

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

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

源代码在此实例中不起作用,不确定原因,因为它应该调用/bin/bash

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

test:
    $(shell . ./my_script)

注:此示例不包括制表符;必须格式化堆栈交换。

发生此问题的原因是jenkins Execute Shell通过其/bin/sh运行脚本

因此,/bin/sh不知道“来源”

您只需要在jenkins中的ExecuteShell顶部添加以下行

#!/bin/bash

这可能会对您有所帮助,因为我试图用命令
重新加载我的
.profile
。配置文件
,它有一个语法错误

源代码
内置是一个巴什主义。将其简单地写为

例如

. $FILE

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

. ./$FILE


source是一个bash内置命令,所以要执行source命令,您可以以Root用户身份登录

sudo-s

source./filename.sh
我在试图从#Jenkins execute shell调用source命令时遇到了这个错误

source profile.txt
source profile.properties

替换命令使用

/profile.txt
/配置文件.属性


注意:在Ubuntu上,两个点(.)之间有一个空格。

我使用了,而不是使用sh scriptname.sh来运行文件。scriptname.sh成功了! 我的文件的第一行包含:
#/bin/bash

使用此命令运行脚本

.name_of_script.sh


有人可以合理地说,支持
source
的shell是“错误版本”。此外,错误消息
source:not found
表示
source
命令的计算正确,但它应该读取的文件不存在。无法“安装”
source
,因为它是shell的一个功能。它不能作为一个外部命令来实现/bin/sh,在另一个linux上,如果我手动输入sh并询问“哪个源”,它会告诉我:source:shell内置命令哦,这就是这一行的目的。我一直在想。非常感谢!我不允许更改脚本,它在redhat服务器上运行良好。但在该服务器上,源代码似乎包含在shIf中,如果它有
source
,则严格来说它不是
sh
。我在Jenkins上遇到了这种类型的问题(试图获取存储为“机密文件”的文件),通过“.”进行寻源。命令是解决方案。为了与Mac OS(开发环境)和Travis CI(测试环境)兼容,我不得不使用
/文件名
。否则,在Travis-CI上运行测试时,我会得到一个
sh:1::filename:notfound
错误。感谢您在ubuntu 20.04上工作。当我不得不在npm命令中运行shell脚本时,谢谢!用/bin/bash替换/bin/sh在Ubuntu上确实有效!我很好奇为什么,这是否意味着在Ubuntu bash上是sh?@Milad:在最近的Ubuntus上,
/bin/sh
调用
/bin/dash
。传统上,称为
/bin/sh
/bin/bash
是sh兼容模式。@Mild我认为它在ubuntu 14.04上不起作用。您的操作系统版本是什么?可能有帮助-如果您有级联脚本,请重命名所有“sh->bash”。谢谢。:-)不幸的是,如何解决这个问题对我来说不是很直观,但它让我走上了正确的道路。我不得不将
SHELL:=/bin/bash
添加到我的Makefile的顶部。很好!我正在运行RHEL和Ubuntu服务器,我总是遇到一些小问题,比如Ubuntu的这个问题。我真的很喜欢RHEL,RHEL也很喜欢linux。公认的答案在Ubuntu14上不起作用,这一个可以!请在你的答案中添加一些进一步的解释-它有什么作用
dpkg reconfigure
可能无法为所有用户访问,尤其是在不基于debian Fixed my
的系统上,源代码:找不到
在debian升级后旧telnet客户端出现错误,谢谢。帖子说
sh:1:source:找不到
找不到文件
这看起来不是一个有效的解决方案。如果用户没有sudo权限怎么办?而来源的东西之后只能作为管理员用户使用,这将导致新的麻烦这已经被回答了多次。如果您在这种情况下添加了新答案,请提供更多信息。毕竟,给定的问题与Jenkins无关
.name_of_script.sh