编辑

编辑

[编辑-节省您的时间。更好地呈现情况这个条目]

我有一个带有 shebang 的脚本,可以在 Ubuntu Mate 上运行,但不能在 Lubuntu Minimal (+LXDE) 上运行。

我无法从搜索中得到我需要的东西,我现在不知所措。

我的第一个(有史以来!)脚本是在我的 Ubuntu Mate(xenial)主机上编写的,运行起来非常轻松。该版本位于本文末尾。

我将相同的脚本带到我的 VM Lubuntu Minimal 机器上(手动重写 - 不共享),但遇到了麻烦。

在 Lubuntu Minimal 中,我尝试了以下从各个论坛收集的 shebangs:

#!/bin/bash在主机中工作正常

#!/bin/sh

#!/usr/bin/env bash

其产量(大部分):

bash: /home/user/bin/script1: [the path part of the shebang, e.g./bin/bash/]: bad interpreter: not a directory

我已经重新启动了机器一两次,并使用chmod +x-chmod 700检查“ls -l”显示与 Ubuntu Mate 上的工作版本相同的权限。

我尝试过命名脚本script1.sh以及仅命名script1.我使用/.script1and调用它/.script1.sh,但没有结果。 (我不知道这些/.sh到底是做什么的,也不知道是什么过程)。

我已将脚本文件放置在:

/usr/local/bin(我想我必须根据记忆来创建)

~/Desktop只是去看看

~/bin(我确实必须创建这个)

有些论坛谈到了$PATH重启,所以我重启了几次(但我不明白$PATH)。

仅有的(部分)成功来自于删除 shebang 并将该脚本保存在~/bin.

两个问题:

  1. 我就是不明白为什么。 Ubuntu Mate 所拥有的 Lubuntu Minimal 缺少什么关键功能?如果我只是创建一个“/bin/bash”目录,bash 会神奇地找到它的路径,不执行任何操作,还是会破坏它?

  2. 最终,我希望它从启动器运行.desktop,但最初的实验失败了 -Exec=script1在桌面条目中使用会使终端窗口立即闪烁然后关闭。以前我在 Lubuntu 中使用过bash -c "cmd1 && cmd2 &&...",但 bash 在这里抛出错误。直观上,我猜这是因为我从 shebang 中删除了“bash”,但请参见上面的问题 1。

我的头脑现在很混乱,我不知道从哪里开始阅读才能解决这个问题。您的智慧将不胜感激。

提前致谢

原始测试脚本(适用于 Ubuntu Mate):

#!/bin/bash

#host to block
echo -e "enter domain to block:"
read host_name  
host_entry="127.0.1.1\t$host_name"
echo -e $host_entry >>/home/user/Desktop/host-edits-test
echo "***done and gone***" 
sleep 2
exit 0

答案1

正如评论已经指出的那样,您似乎同时遇到了几个问题:

  1. 正确的 shebang 语法是#!,但这似乎只是您问题中的拼写错误,而不是脚本中的拼写错误。
  2. 最后的斜杠表示目录,这就是您收到消息的原因

    错误的解释器:不是目录

  3. Ubuntu 的所有变体dash都使用默认 shell;您可能需要bash手动安装。

到目前为止,您的“原始测试脚本”看起来是正确的,只需确保bash已安装,就应该没问题。

或者,如果您的脚本中不依赖 bashism,请将 shebang 更改为/bin/sh通常指向当前系统 shell 的链接,在本例中可能是dash;这是最便携的解决方案。

https://askubuntu.com/questions/141928/what-is-difference- Between-bin-sh-and-bin-bash

编辑

您似乎试图并行解决多个问题,并混淆了问题中的几个问题。于是,问题一个接一个:

  1. 确保该bash软件包已安装。
  2. 确保/bin/bash确实是可执行的二进制文件。
  3. 确保您可以/bin/bash以用户身份调用,并获得有效的命令行。
  4. 检查您是否可以运行一个仅包含 shebang 和一些echo.

如果到目前为止一切正常,问题很可能出在您的实际脚本中,而不是系统设置或bash二进制文件中。如果您遇到任何问题,请更新您的问题精确描述和输出,暂时跳过其余部分。或者更好的是,创建一个新问题,因为这已经很混乱了。

相关内容