这确实很奇怪。您描述的步骤应该有效,因此您的环境或这些步骤的执行中一定存在一些小错误。您可以做一些事情来帮助诊断:
检查控制字符
只要没有拼写错误或控制字符,您记录的内容看起来还不错。您应该输入以下内容进行检查:
cat -vt ./test
如果您看到任何可以解释问题的意外额外文本。例如,行尾的“^M”表示您的编辑器将文件保存为 Windows 格式。
可靠地重新生成文件
要创建已知良好的./test2,请复制粘贴以下命令:
`which bash`
printf "#\!`which sh`\necho HELLO\n" > ./test2
chmod +x ./test2
./test2
exit
检查找不到哪个命令
如果你输入...
./ajio
...你明白了吗...
./ajio: Command not found.
...正如您在./test 中描述的那样?我只是编造了ajio这个名字,所以它不应该存在。如果他们的消息匹配,那么它并没有真正告诉你任何新的东西。但如果消息不同,则表明至少找到了 ./test 并且可以执行。
也有可能您的sh 版本试图告诉您不是找不到test,而是在运行test 时找不到shell 尝试运行的某些命令。这不应该是 echo 命令,因为大多数 shell 实现将是一个内部命令,在 shell 内部实现。但是,shell 可能会运行一个初始化脚本,其中包含指定它无法运行的命令的行。如果你运行man sh,它会告诉你你的shell 可能尝试运行的所有不同的启动文件。这些可能与您以交互方式启动 shell 时使用的不同。但是,作为初学者,检查这些脚本的有效性可能会令人生畏。不过,任何虚假的定制都可能是针对您的个人 shell 启动过程,并且不会影响整个 Linux 安装,因此请运行 ls -ld ~/.* 以列出您主目录中的隐藏文件,并检查任何看起来像 shell 启动文件的文件(例如~/.bashrc、~/.profile、~/.bash_login)。检查它们指定的任何命令都可以找到,并在路径变量设置为包含它们的位置后调用。
与另一个外壳比较
如果 /bin/sh 安装/初始化有问题,那么您可以通过调用另一个 shell 来绕过它。试试……
which zsh
which tcsh
which csh
...如果其中一个为您找到替代外壳,请编辑或重新创建指定该外壳的文件,唉...
#!/bin/csh
echo HELLO
...然后chmod +x 它和./-运行它。如果可行,那么您就知道您的问题是 /bin/sh 特定的。