shell 脚本执行,出现错误bad interpreter: No such file or directory

2019-03-10 23:31|来源: 网络

: bad interpreter: 没有那个文件或目录中,我们已经解决了这个问题,下面是一篇来自网络的文章,也可以顺便看一下:


出现bad interpreter:No such file or directory的原因

是文件格式的问题。这个文件是在Windows下编写的。换行的方式与Unix不一样,但是在VI下面如果不Set一下又完全看不出来。

解决方法:
1、上传到linux主机运行

    chmod +x back

    ./back

   错误提示如下:
    bash: ./back : bad interpreter:No such file or directory

2、错误分析:

因为操作系统是windows,在windows下编辑的脚本,所以有可能有不可见字符。

从你的脚本及报告的错误看来, 很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.
可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
(1). vi filename
然后用命令
:set ff?
可以看到dos或unix的字样. 如果的确是dos格式的, 那么你可以用set ff=unix把它强制为unix格式的, 然后存盘退出. 再运行一遍看.

**********************************************************************

转换不同平台的文本文件格式可以用
1. unix2dos或dos2unix这两个小程序来做. 很简单. 在djgpp中这两个程序的名字叫dtou和utod, u代表unix, d代表dos
2. 也可以用sed 这样的工具来做:
sed 's/^M//' filename > tmp_filename
mv -f tmp_filename filename
来做
特别说明:^M并不是按键shift + 6产生的^和字母M, 它是一个字符, 其ASCII是0x0D, 生成它的办法是先按CTRL+V, 然后再回车(或CTRL+M)

另外, 当SHELL程序报告command not found时, 总是去检查一下你的PATH里面有没有程序要用到的每一个命令(没指定绝对路径的那种). 你这么小的程序, 可以一行一行核对

 @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);  

相关问答

更多

Shell脚本中的目录或文件包含空格错误(Directory or File contain space error in Shell Script)

经典; 不要用于...,使用 find "$INDIR" -type f | while read file; do echo "Encrypting $file" "$PROJECT_DIR/crypt" -e -k $ENC_KEY -i "$file" -o "$OUTDIR/`basename "$(dirname ${file})"`/`basename "$file"`" done Classic; don't use for .. in, use find "$INDIR" ...

./configure:/ bin / sh ^ M:不好的解释器(./configure : /bin/sh^M : bad interpreter [duplicate])

要修复,请使用vi或vim打开脚本,然后输入vi命令模式(ESC键),然后键入: :set fileformat=unix 最后保存 :x! 或:wq! To fix, open your script with vi or vim and enter in vi command mode (key Esc), then type this: :set fileformat=unix Finally save it :x! or :wq!

Shell脚本当前目录?(Shell script current directory?)

shell脚本的当前(初始)目录是您调用该脚本的目录。 The current(initial) directory of shell script is the directory from which you have called the script.

Unix shell:将目录名称的文件转换为':'分隔的类路径(Unix shell: Turn file with directory names to ':' separated classpath)

你的while循环在一个子shell中,所以没有变量会被传回到主shell。 无论如何,你都想这样做: CP=$(find $LIB_DIR -name '*.jar' -print | tr '\n' ':') 这将做你想要的一切。 Your while loop is in a sub-shell, so no variables will be passed back to the main shell. You want to do something like this anyway: ...

紧急求助SHELL脚本执行问题

sh -x 看一下 你的while循环中的<<FTPIT 需要在后边做个收尾,这个模式是 <<EOF (内容) EOF 所以你需要在结尾加上FTPIT,要不这个内容就没结束。 跟分号不分号没任何关系 ftp -i -n $ipadd <<FTPIT user $ftpuser $ftppwd echo "connect $ipadd success!" cd /home/dcms/test binary get $line echo "get file $line " close bye FTPI ...