use*_*062 167 command-line bash scripts
我想执行一个shell脚本:
-rwxr-x--x 1 root root 17234 Jun 6 18:31 create_mgw_3shelf_6xIPNI1P.sh
Run Code Online (Sandbox Code Playgroud)
我尝试执行标准程序,但出现此错误:
./create_mgw_3shelf_6xIPNI1P.sh
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
DEBUG cd/etc/opt/ldapfiles/ldif_in ;
./create_mgw_3shelf_6xIPNI1P.sh
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
**ERROR sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory**
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我是作为组root
下的用户这样做的root
。
这是否意味着该文件没有root
用户的正确权限?
Gil*_*il' 287
这不是权限问题,您没有收到有关权限的消息
/bin/bash^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
该脚本表明它必须由位于 的 shell 执行/bin/bash^M
。没有这样的文件:它被称为/bin/bash
.
该^M
是一个回车符。Linux 使用换行符来标记一行的结束,而 Windows 使用两个字符的序列 CR LF。您的文件具有 Windows 行结尾,这让 Linux 感到困惑。
删除虚假的 CR 字符。您可以使用以下命令执行此操作:
sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh
Run Code Online (Sandbox Code Playgroud)
Byt*_*der 31
您的文件具有DOS/Windows 样式的行尾 (CR LF),但在类 Unix 系统上,只有LF控制字符用作换行符。
附加的CR控制字符显示为^M
在您的输出中编码。运行时也可以看到cat -A create_mgw_3shelf_6xIPNI1P.sh
。
要将行尾从 DOS/Windows 样式转换为 Unix 样式,有一个名为dos2unix
. 您使用以下方法安装它:
sudo apt-get install dos2unix
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下两种方式简单地转换文件的行尾
dos2unix FILENAME
unix2dos FILENAME
Run Code Online (Sandbox Code Playgroud)
在您的情况下,只需在下面运行此命令,脚本文件将就地转换:
dos2unix create_mgw_3shelf_6xIPNI1P.sh
Run Code Online (Sandbox Code Playgroud)
之后 Bash 应该能够正确解释文件。
小智 12
问题是你用 Dos 编辑!
使用 vi 打开您的文件,然后使用以下命令设置 unix:
:set ff=unix
:wq
Run Code Online (Sandbox Code Playgroud)
一切都很好
小智 5
正如其他答案中所解释的,这是一个格式问题。因此,答案是将格式从 DOS 更改为 Unix 样式的行尾。这是“就地”修复文件的另一种简单方法
fromdos file
Run Code Online (Sandbox Code Playgroud)
它在包中可用tofrodos
:
sudo apt-get install tofrodos
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
509088 次 |
最近记录: |