Solaris / bin / sh采购文件的行为与执行文件不同。为什么?

埃里克·本内特(Erik Bennett)

我有一个bash脚本,它将/bin/sh在Solaris计算机上被调用当我以运行脚本时/bin/sh ./solarisSh,它可以工作。当我获取相同的脚本时,它将失败。

我知道bash,伯恩·壳牌几乎一无所获。这不是我的问题。

我的问题是:为什么/bin/sh在采购文件时与单纯执行文件时Solaris的行为有何不同?

这是数据...

ns2 ~/tmp 560> env -i /bin/sh -x
$ uname -a
+ uname -a 
SunOS ns2 5.7 Generic_106541-15 sun4m sparc SUNW,SPARCstation-10
$ cat ./solarisSh
+ cat ./solarisSh 

[ ! "$BASH" ] && {
    >&2 echo "ERROR: $0 is a Bash script.  Exiting."
    return 1 2> /dev/null || exit 1
}

haveRootPriv() {
    local idCmd=/usr/bin/id
    local euid
    local uid

    [[ $OHM_OS == "SunOS" ]] && idCmd=/usr/xpg4/bin/id
    if (( ( $( $idCmd -ru) == 0 ) || ( $( $idCmd -u) == 0 ) )); then
       echo 1
       return 0
    fi
    echo 0
    return 1
}
$ /bin/sh -x ./solarisSh 
+ /bin/sh -x ./solarisSh 
+ [ !  ] 
+ echo ERROR: ./solarisSh is a Bash script.  Exiting. 
ERROR: ./solarisSh is a Bash script.  Exiting.
+ return 1 
$ . ./solarisSh 
+ . ./solarisSh 
syntax error: `$' unexpected
$ 

错误:./solarisSh是bash脚本。正在退出。是我在获取文件时所期望的。我得到的是语法错误:$意外

概括一下这个问题:为什么在采购文件时Solaris / bin / sh的行为与仅执行文件时的行为如此不同?

我想我也有第二个问题(对不起):为什么-x在采购文件时不起作用

谢谢。
埃里克

迈克尔·荷马

删除$(...)命令替换将为我消除5.10上的失败。这表明您所看到的是在.执行之前解析整个文件并在该不受支持的语法下遇到错误的效果。相比之下,脚本是逐行解析的,因此它在注意到语法错误之前就退出了。

在实验上,您可以插入其他语法错误并查看相同的行为:.及早失败,并sh执行到格式错误的行。

为什么?我不知道。我似乎找不到任何地方专门记录它。手册页仅表示.

 . filename

     Read and execute commands from filename and return.  The
     search path specified by PATH is used to find the direc-
     tory containing filename.

的文档<<word说“ shell输入最多可以读到...”,这可能意味着需要进行简约的解析,但是我在任何地方都看不到任何明确的内容。通常,逐行解析对于shell脚本来说非常普遍,例如,这就是Bash在两种情况下所做的事情。

为什么在采购文件时-x不起作用?

只要命令确实开始执行,它就可以工作。在解析阶段不打印任何内容。


对于此特定示例,可以使用` ... `-style命令替换,但实际脚本可能更复杂。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Docker“在$ PATH中找不到可执行文件`/ bin / sh`”?

来自分类Dev

为什么不“ sudo rm / bin / kill”删除kill可执行文件

来自分类Dev

为什么我必须进入我的私人bin文件夹才能执行.sh脚本?

来自分类Dev

为什么/ bin / sh在Mac和Ubuntu上的行为有所不同

来自分类Dev

为什么拒绝我创建的bin文件的执行权限?

来自分类Dev

为什么“ / usr / bin /”和“ / usr / bin / X11 /”中的“相同”可执行文件?他们真的一样吗?

来自分类Dev

/ bin / sh笨拙的行为

来自分类Dev

在/ bin / file的输出中引用可执行文件时,“ LSB”是什么意思?

来自分类Dev

为什么我的文件目录包含“ / bin”?

来自分类Dev

从Solaris中的文件过滤非重复值

来自分类Dev

从Solaris中的文件过滤非重复值

来自分类Dev

Solaris11:从存储库恢复文件

来自分类Dev

Solaris:如何删除配置文件?

来自分类Dev

在Solaris中负责密码老化的文件

来自分类Dev

如何在Solaris中的文件夹上执行校验和

来自分类Dev

对于Solaris,grep -A的替代命令是什么?

来自分类Dev

什么是Solaris IPS /它如何工作?

来自分类Dev

Solaris恢复和家:我想念什么?

来自分类Dev

对于Solaris,grep -A的替代命令是什么?

来自分类Dev

在solaris上如何以编程方式获取正在运行的进程的可执行文件的完整路径?

来自分类Dev

* .xlsx文件何时以及为什么包含* .bin文件?

来自分类Dev

从GitHub删除Bin可执行文件文件夹

来自分类Dev

从/ usr / local / bin启动可执行文件需要访问本地文件

来自分类Dev

如何创建和链接〜/ bin文件夹以包含可执行文件。

来自分类Dev

从/ usr / local / bin启动可执行文件需要访问本地文件

来自分类Dev

如何使用.bin文件

来自分类Dev

使用.bin文件

来自分类Dev

读取.bin文件NodeJS

来自分类Dev

使用.bin文件

Related 相关文章

  1. 1

    为什么Docker“在$ PATH中找不到可执行文件`/ bin / sh`”?

  2. 2

    为什么不“ sudo rm / bin / kill”删除kill可执行文件

  3. 3

    为什么我必须进入我的私人bin文件夹才能执行.sh脚本?

  4. 4

    为什么/ bin / sh在Mac和Ubuntu上的行为有所不同

  5. 5

    为什么拒绝我创建的bin文件的执行权限?

  6. 6

    为什么“ / usr / bin /”和“ / usr / bin / X11 /”中的“相同”可执行文件?他们真的一样吗?

  7. 7

    / bin / sh笨拙的行为

  8. 8

    在/ bin / file的输出中引用可执行文件时,“ LSB”是什么意思?

  9. 9

    为什么我的文件目录包含“ / bin”?

  10. 10

    从Solaris中的文件过滤非重复值

  11. 11

    从Solaris中的文件过滤非重复值

  12. 12

    Solaris11:从存储库恢复文件

  13. 13

    Solaris:如何删除配置文件?

  14. 14

    在Solaris中负责密码老化的文件

  15. 15

    如何在Solaris中的文件夹上执行校验和

  16. 16

    对于Solaris,grep -A的替代命令是什么?

  17. 17

    什么是Solaris IPS /它如何工作?

  18. 18

    Solaris恢复和家:我想念什么?

  19. 19

    对于Solaris,grep -A的替代命令是什么?

  20. 20

    在solaris上如何以编程方式获取正在运行的进程的可执行文件的完整路径?

  21. 21

    * .xlsx文件何时以及为什么包含* .bin文件?

  22. 22

    从GitHub删除Bin可执行文件文件夹

  23. 23

    从/ usr / local / bin启动可执行文件需要访问本地文件

  24. 24

    如何创建和链接〜/ bin文件夹以包含可执行文件。

  25. 25

    从/ usr / local / bin启动可执行文件需要访问本地文件

  26. 26

    如何使用.bin文件

  27. 27

    使用.bin文件

  28. 28

    读取.bin文件NodeJS

  29. 29

    使用.bin文件

热门标签

归档