有没有办法强制shell脚本在bash而不是sh下运行?

Locane

我一直在四处寻找试图找到的东西,但是我找不到任何可用的东西。我相信答案很简单。

我正在编写一些shell脚本,以供不同的人运行以用于各种目的,其中一些可能会使用“ sh”而不是“ bash”来调用脚本。

该脚本包含无法在常规Shell环境中运行且需要bash的工具-即使使用“ sh”调用该脚本,也有一种方法可以强制该脚本在bash下运行吗?

基思·汤普森

正如Richard Pennington所说,做到这一点的正确方法是

#!/bin/bash

作为脚本的第一行。

但是,如果用户使用sh显式调用它,那将无济于事例如,如果我输入

sh your-script-name

#!行将被忽略。

您不能真正阻止人们这样做,但是可以通过在脚本顶部添加以下内容来阻止它:

#!/bin/bash

if [ ! "$BASH_VERSION" ] ; then
    echo "Please do not use sh to run this script ($0), just execute it directly" 1>&2
    exit 1
fi

或者,您可以执行以下操作:

#!/bin/bash

if [ ! "$BASH_VERSION" ] ; then
    exec /bin/bash "$0" "$@"
fi

但这很容易出错。例如,$0通常不能保证脚本(通常是脚本的名称)实际上是可以用来调用它的名称。我可以想象,如果您输入错误或系统配置有误,就会陷入无限循环。

我建议错误消息方法。

(注意:我刚刚编辑了此答案,因此错误消息包括脚本的名称,这可能对用户有所帮助。)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法在不运行 ~/.bashrc 脚本的情况下打开 Windows 10 Ubuntu bash?

来自分类Dev

有没有办法同时使用一个脚本运行多个 bash 脚本?

来自分类Dev

有没有办法从 Groovy 运行 Bash

来自分类Dev

有没有办法从鱼壳中“获取” sh脚本?

来自分类Dev

有没有办法编写一个 Bash 脚本,每 X 分钟重复运行一次?

来自分类Dev

有没有办法强制在谷歌应用脚本中弹出“允许访问”按钮?

来自分类Dev

有没有办法强制 krunner 在 konsole 中运行任何字符串?

来自分类Dev

有没有办法让sh / bash / zsh“ case”使用变量作为测试值?

来自分类Dev

有没有办法从bash函数调用中强制回显命令行?

来自分类Dev

有没有办法从bash函数调用中强制回显命令行?

来自分类Dev

有没有办法有条件地运行脚本?

来自分类Dev

有没有办法强制调用覆盖的方法?

来自分类Dev

有没有办法强制消除这种歧义?

来自分类Dev

有没有办法在脚本中更新而不是覆盖 Dask YarnCluster 的 worker_env?

来自分类Dev

有没有办法在没有额外工具的情况下将可执行二进制文件嵌入到shell脚本中?

来自分类Dev

有没有办法检查shell脚本是否用-x标志执行

来自分类Dev

有没有办法查看哪个进程调用了shell脚本?

来自分类Dev

有没有办法在Shell脚本或函数中绕过管道?

来自分类Dev

有没有办法在POSIX Shell脚本中修改$ @数组

来自分类Dev

有没有办法检查我的脚本是否在phantomjs中运行?

来自分类Dev

有没有办法输出当前正在运行的脚本的内容?

来自分类Dev

有没有办法优化这个脚本,让它运行得更高效?

来自分类Dev

有没有办法在调试模式下运行celery worker?很像烧瓶调试?

来自分类Dev

有没有办法在不创建循环的情况下运行此代码

来自分类Dev

有没有办法查看按下某个键时运行的命令?

来自分类Dev

在source命令中使用时,有没有办法获取bash脚本的路径

来自分类Dev

有没有办法从bash中的函数内部获取脚本的位置参数?

来自分类Dev

有没有办法获取 bash 脚本的当前代码工作区名称?

来自分类Dev

如何运行耗时超过 20 分钟的 Azure Cloud Shell 脚本?有没有办法防止 Azure Cloud Shell 中的超时?

Related 相关文章

  1. 1

    有没有办法在不运行 ~/.bashrc 脚本的情况下打开 Windows 10 Ubuntu bash?

  2. 2

    有没有办法同时使用一个脚本运行多个 bash 脚本?

  3. 3

    有没有办法从 Groovy 运行 Bash

  4. 4

    有没有办法从鱼壳中“获取” sh脚本?

  5. 5

    有没有办法编写一个 Bash 脚本,每 X 分钟重复运行一次?

  6. 6

    有没有办法强制在谷歌应用脚本中弹出“允许访问”按钮?

  7. 7

    有没有办法强制 krunner 在 konsole 中运行任何字符串?

  8. 8

    有没有办法让sh / bash / zsh“ case”使用变量作为测试值?

  9. 9

    有没有办法从bash函数调用中强制回显命令行?

  10. 10

    有没有办法从bash函数调用中强制回显命令行?

  11. 11

    有没有办法有条件地运行脚本?

  12. 12

    有没有办法强制调用覆盖的方法?

  13. 13

    有没有办法强制消除这种歧义?

  14. 14

    有没有办法在脚本中更新而不是覆盖 Dask YarnCluster 的 worker_env?

  15. 15

    有没有办法在没有额外工具的情况下将可执行二进制文件嵌入到shell脚本中?

  16. 16

    有没有办法检查shell脚本是否用-x标志执行

  17. 17

    有没有办法查看哪个进程调用了shell脚本?

  18. 18

    有没有办法在Shell脚本或函数中绕过管道?

  19. 19

    有没有办法在POSIX Shell脚本中修改$ @数组

  20. 20

    有没有办法检查我的脚本是否在phantomjs中运行?

  21. 21

    有没有办法输出当前正在运行的脚本的内容?

  22. 22

    有没有办法优化这个脚本,让它运行得更高效?

  23. 23

    有没有办法在调试模式下运行celery worker?很像烧瓶调试?

  24. 24

    有没有办法在不创建循环的情况下运行此代码

  25. 25

    有没有办法查看按下某个键时运行的命令?

  26. 26

    在source命令中使用时,有没有办法获取bash脚本的路径

  27. 27

    有没有办法从bash中的函数内部获取脚本的位置参数?

  28. 28

    有没有办法获取 bash 脚本的当前代码工作区名称?

  29. 29

    如何运行耗时超过 20 分钟的 Azure Cloud Shell 脚本?有没有办法防止 Azure Cloud Shell 中的超时?

热门标签

归档