[编辑-节省您的时间。更好地呈现情况这个条目]
我有一个带有 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
.我使用/.script1
and调用它/.script1.sh
,但没有结果。 (我不知道这些/.
和sh
到底是做什么的,也不知道是什么过程)。
我已将脚本文件放置在:
/usr/local/bin
(我想我必须根据记忆来创建)
~/Desktop
只是去看看
~/bin
(我确实必须创建这个)
有些论坛谈到了$PATH
重启,所以我重启了几次(但我不明白$PATH
)。
这仅有的(部分)成功来自于删除 shebang 并将该脚本保存在~/bin
.
两个问题:
我就是不明白为什么。 Ubuntu Mate 所拥有的 Lubuntu Minimal 缺少什么关键功能?如果我只是创建一个“/bin/bash”目录,bash 会神奇地找到它的路径,不执行任何操作,还是会破坏它?
最终,我希望它从启动器运行
.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
正如评论已经指出的那样,您似乎同时遇到了几个问题:
- 正确的 shebang 语法是
#!
,但这似乎只是您问题中的拼写错误,而不是脚本中的拼写错误。 - 最后的斜杠表示目录,这就是您收到消息的原因
错误的解释器:不是目录
- 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
编辑
您似乎试图并行解决多个问题,并混淆了问题中的几个问题。于是,问题一个接一个:
- 确保该
bash
软件包已安装。 - 确保
/bin/bash
确实是可执行的二进制文件。 - 确保您可以
/bin/bash
以用户身份调用,并获得有效的命令行。 - 检查您是否可以运行一个仅包含 shebang 和一些
echo
.
如果到目前为止一切正常,问题很可能出在您的实际脚本中,而不是系统设置或bash
二进制文件中。如果您遇到任何问题,请更新您的问题精确描述和输出,暂时跳过其余部分。或者更好的是,创建一个新问题,因为这已经很混乱了。