我在脚本上收到'权限被拒绝'错误。我已经检查了所有常见的嫌疑人:
x
权限rwx
给所有者,这是我正在使用的用户。脚本shebang行是#!/bin/sh
我可以执行得很好。但这是无关紧要的,因为它甚至从未被解析过。在我当前的bash会话中设置-x
除了尝试执行脚本之外不会显示任何其他事情。
我得到的错误是:
$ path/script
bash: path/script: Permission denied
$ _
编辑:如果我将脚本作为参数传递,它可以正常工作
$ /bin/sh -x path/script
...script executes...
答案 0 :(得分:1)
通过深入了解内核调用获取更多信息。如果您了解C和内核API,它会有所帮助。 man
页面是您的朋友。
看看您是否有一个名为strace
的程序,请尝试which strace
。各种UNIX上都有类似的程序(如某些太阳上的truss
,OS X上的dtruss
),但strace
是最常见的。如果你找不到一个,谷歌就会像......一样,无论你使用什么UNIX。
strace -o strace.out -f /bin/sh path/script
-o strace.out
表示跟踪文件strace.out
- 使用编辑器查看
-f
表示遵循子流程。
/bin/sh path/script
是您要跟踪的程序。
您将获得大量输出,有时值得走到尽头并向后工作。
在Linux上还有ltrace
,它也可以跟踪库调用。
如果您要跟踪的程序已在运行,那么-p
选项,后跟该进程的pid
可以非常方便。
当然,在这种情况下完全可以说shell完全可以报告内核告诉它的所有内容。可能没有进一步的信息。