在Linux Alpine 3.11上找不到$ PATH中的SH脚本

别名51

我正在使用Alpine Linux 3.11作为新的Docker容器。

我有默认$PATH变量,其内容为:

echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

当我放置一个脚本wait-for(以开头的shell脚本#!/bin/sh)时,/usr/local/bin它显示得很好:

chmod +x wait-for
mv wait-for /usr/local/bin/wait-for
ls -l /usr/local/bin/wait-for

产生:

-rwxr-xr-x    1 root     root          1451 May  1 16:09 /usr/local/bin/wait-for

当我sh /usr/local/bin/wait-for用来执行它时,它也会运行

但是,当我进入/usr/src/并尝试跑步时,wait-for我得到了sh: wait-for: not found

我的理解是,因为该/usr/local/bin目录位于其中,所以该目录$PATH内的任何脚本都应全局调用。

我误会了什么?

/usr/src/如果使用sh /usr/local/bin/wait-for我可以从中运行文件,但是如果使用/usr/local/bin/wait-for(不带sh前缀),不能从中运行文件,该文件返回sh: /usr/local/bin/wait-for: not found

输出/etc/fstab为:

/dev/cdrom      /media/cdrom    iso9660 noauto,ro 0 0                          
/dev/usbdisk    /media/usb      vfat    noauto,ro 0 0  
库萨兰达

您的交互式外壳为dash(伪装为sh)。dash壳说

sh: /usr/local/bin/wait-for: not found

当它尝试执行脚本时,该脚本的错误行#!指向找不到的解释器。当找不到您键入的命令时,恰好与您将得到的错误完全相同,因此很容易认为这是一个$PATH问题(在这种情况下不存在)。Oher外壳程序提供了更多有用的错误消息(bashzsh指出“错误的解释器:没有这样的文件或目录”,并且还告诉您它尝试执行什么解释器)。

由于该文件是DOS文本文件,因此#!-line指示shell使用来运行脚本/bin/sh\r,其中,\r是回车符的通用表示形式,它是DOS文本文件中行终止的一部分。在Unix系统上,回车符是“普通字符”,而不是行终止符的所有部分,这意味着它试图开始/bin/sh\r运行脚本,然后由于该文件不存在而失败。因此,是“找不到”解释器,而不是脚本本身。

使用显式解释器运行脚本#!总是绕过-line,这就是为什么这样做时不会出现错误的原因。但是,脚本中的每一行仍将在其末尾有回车符,这可能会导致脚本在某些情况下发生故障。

只需将文件重新保存为Unix文本文件,或将其转换为dos2unix,即可解决您的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Sh:在 alpine Docker 映像上找不到文件

来自分类Dev

lldb挂在Alpine Linux上

来自分类Dev

在Alpine Linux上安装Firefox

来自分类Dev

在Alpine Linux上安装ssh-keyscan?

来自分类Dev

无法在Alpine Linux上设置JRE 1.5

来自分类Dev

在Alpine Linux上安装whereis命令

来自分类Dev

网络无法在Alpine linux上启动

来自分类Dev

在Alpine Linux上安装Gearman时出错

来自分类Dev

如何在Alpine Linux上安装TeXLive?

来自分类Dev

如何在Alpine linux上安装screenfetch?

来自分类Dev

alpine linux 上的 firefox 不显示字符

来自分类Dev

现代 alpine linux 上的 python3.7

来自分类Dev

如何在 Linux Alpine 上设置 Clarifai

来自分类Dev

Docker容器中的Alpine Linux忽略了Shell脚本参数

来自分类Dev

如何在Alpine Linux中安装npm

来自分类Dev

在特定分区中安装Alpine Linux

来自分类Dev

Alpine Linux映像中/ etc / network的内容

来自分类Dev

在 alpine linux 上冲刺(在 docker 中)

来自分类Dev

在从 alpine 构建的 docker 容器中找不到“users”命令

来自分类Dev

PyCrypto for Alpine中的Python3?

来自分类Dev

Alpine Linux运行启动脚本来更改/ etc / issue

来自分类Dev

在Alpine Linux上安装Node.js 4

来自分类Dev

无法在Alpine Linux LXC上启动NFS服务器

来自分类Dev

如何在Alpine Linux上安装Microsoft True Type字体?

来自分类Dev

如何在Alpine Linux映像上启用busybox httpd

来自分类Dev

如何在Alpine Linux上设置主目录?

来自分类Dev

在 Alpine linux 上运行 ARA 服务器时出错

来自分类Dev

在 CakePHP 3 中的包含模型上找不到记录

来自分类Dev

使用Alpine Linux在Docker容器中的LaTeX(Latex的存储库)