当我试图使用./test.sh在Redhat中运行我的.sh文件时
我收到一个错误
[test@tester unix_scripts]$ ./test.sh : No such file or directory [test@tester unix_scripts]$
我也用chmod 777 test.sh设置了文件的权限
还是一样的错误
有谁能够帮助我?
其实问题是我使用的脚本是在dos中创build的,所以我通过使用dos2unix命令将脚本转换为unix。 感谢大家的宝贵帮助。
您可能忘记了放在脚本的第一行:
#!/bin/bash
例如:
#!/bin/bash echo Hello World
如果你尝试一个简单的shell脚本,就像上面的hello world示例一样? 它工作与否?
顺便说一句:你确定SELinux上下文吗?
什么: getenforce说?
什么: ls -l test.sh说?
我最好的build议是首先尝试一个非常简单的脚本,以便检查每个环境和上下文行为。
仔细检查你是否在正确的目录下(你可以通过input“ls”来查看目录中的内容),文件名是“test.sh”。 你也可以尝试:
[test@tester unix_scripts]$ sh test.sh
在unix_scripts目录下是test.sh吗?
test.sh中是否存在不存在的文件或目录? 因为错误可能来自脚本内部,而不是来自脚本的执行…
是的,它应该是#! (崩溃砰!):)
你可以发布以下命令的结果,在脚本所在的目录中执行吗?
ls -l cat test.sh
你使用sh还是bash ? (即脚本的第一行是什么?)
如果你正在使用#!/ bin / sh ,那么你需要确保/ bin / sh存在(键入哪个sh )
如果/ bin / sh没有安装,您可能需要尝试#!/ bin / bash或其他shell。
尝试getenforce 。 如果是执行返回执行然后selinux打开,您的脚本可能需要在不同的上下文才能运行。
如果getenforce确实返回执行,则检查dmesg,/ var / log / message /var/log/audit/audit.log或selinux在主机上login的任何位置以查找确切的问题。
或者只是尝试chunc脚本到另一个脚本运行相同的上下文。
要查看文件上下文,请使用ls -lZ 。
或者试试
chcon --reference=/script/that/will/work /script/that/wont/work
也许检查chcon手册页,我不是100%确定 – 参考语法。
在你的脚本上放置一个hashbang不会改变它的运行。 您必须将其设置为可执行文件(chmod + x test.sh),然后运行它(./test.sh),或者将其作为shell的参数(sh test.sh)进行调用。
你也可以把脚本放在你的$ PATHvariables的任何位置(例如〜/ bin /,/ usr / local / bin /),如果它是可执行的,你可以从任何地方运行而不用引用它的位置(test.sh) 。
如果一个脚本运行时没有作为shell的参数,它将默认运行在你当前使用的任何shell中。 这就是hashbang变得重要的地方…如果你想确保它作为bash脚本运行,即使用户使用tcsh或者ksh或者其他的东西,你也要把#!/ bin / bash作为第一行脚本。
第1步 – 在文件的第一行检查文件第2步 – shebang是否指向真正的二进制文件? (尝试which [path after shebang] )第3步 – 如果第2步检出,. /full/path/to/sh test.sh应该工作,否则..第4步 – 尝试/full/path/to/sh test.sh
你张贴的东西,乖巧,没有任何意义
您需要更改权限:
chmod +x test.sh