Nit*_*mar 8 linux scripting bash fedora shell-script
我有两个类似的脚本,但名称不同。一个工作正常,但另一个会抛出错误。谁能告诉我有什么问题吗?
这是我的 test.sh 脚本,运行良好
[nnice@myhost Scripts]$ cat test.sh
#!/bin/bash
function fun {
echo "`hostname`"
}
fun
[nnice@myhost Scripts]$ ./test.sh
myhost.fedora
Run Code Online (Sandbox Code Playgroud)
这是我的另一个脚本 demo.sh 但它抛出错误
[nnice@myhost Scripts]$ cat demo.sh
#!/bin/bash
function fun {
echo "`hostname`"
}
fun
[nnice@myhost Scripts]$ ./demo.sh
bash: ./demo.sh: cannot execute: required file not found
Run Code Online (Sandbox Code Playgroud)
两个脚本具有相同的权限
[nnice@myhost Scripts]$ ll test.sh
-rwxr-xr-x. 1 nnice nnice 65 Oct 21 10:47 test.sh
[nnice@myhost Scripts]$ ll demo.sh
-rwxr-xr-x. 1 nnice nnice 58 Oct 21 10:46 demo.sh
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 20
您的demo.sh
脚本是一个 DOS 文本文件。此类文件具有 CRLF 行结尾,并且行末尾的额外 CR(回车)字符会导致出现问题。
它引起的具体问题是#!
- 行上的解释器路径名现在引用了名为的东西/bin/bash\r
(象征\r
着回车符,这是一个类似空格的字符,因此通常不可见)。找不到该文件,因此这就是导致错误消息的原因。
要解决此问题,请将脚本从 DOS 文本文件转换为 Unix 文本文件。如果您在 Windows 上编辑脚本,则可以通过配置 Windows 文本编辑器来创建 Unix 文本文件来完成此操作,但您也可以使用dos2unix
适用于大多数常见 Unix 变体的实用程序。
$ ./script
bash: ./script: cannot execute: required file not found
Run Code Online (Sandbox Code Playgroud)
$ dos2unix script
$ ./script
harpo.local
Run Code Online (Sandbox Code Playgroud)
关于您的代码:请不要执行echo `some-command`
或echo $(some-command)
输出some-command
. 直接使用命令即可:
#!/bin/sh
fun () {
hostname
}
fun
Run Code Online (Sandbox Code Playgroud)
(由于脚本现在不使用任何需要的东西bash
,我也转向调用更简单的/bin/sh
shell。)
归档时间: |
|
查看次数: |
49534 次 |
最近记录: |