Ubuntu下Hyperledger Explorer启动脚本执行失败:文件不存在错误求助
解决Ubuntu中执行start.sh提示“no such file or directory”的问题
我之前帮不少人排查过这种“明明文件就在眼前却执行不了”的坑,大概率是下面几个原因,咱们一步步来解决:
先确认脚本有没有执行权限
先看下文件的权限详情:ls -l start.sh如果输出里权限列是
-rw-r--r--这种没有x(可执行)标记的,那肯定跑不起来,给它加上权限就行:chmod +x start.sh加完再试试
./start.sh。排查Windows换行符的锅
要是你这个脚本是在Windows下编辑过或者从Windows机器传过来的,大概率是换行符出问题了——Linux用LF,Windows用CRLF,bash会把CR当成文件名的一部分,自然找不到。
验证一下:cat -A start.sh要是每行结尾都有
^M$,那就是这个问题。装个工具转一下:sudo apt install dos2unix dos2unix start.sh转换完再执行试试,应该能正常跑了。
检查文件名有没有隐藏字符
有时候复制粘贴文件名或者用某些工具生成文件时,会不小心带上空格、制表符这类看不见的字符,看起来是start.sh,实际文件名带了额外字符。
用这个命令看原始文件名:ls -b要是看到
start.sh旁边有\或者其他转义字符,那就重命名它:# 把带隐藏字符的文件名用引号括起来,替换成干净的文件名 mv "start.sh" start.sh或者更稳妥的,用inode号来重命名:
# 先查文件的inode号 ls -i # 假设查到的inode是12345,执行下面的命令 find . -inum 12345 -exec mv {} start.sh \;看看脚本的shebang行是不是写错了
脚本第一行的#!/bin/bash是指定解释器的,要是路径不对也会报错。先看第一行:head -n 1 start.sh再确认bash在你系统里的实际路径:
which bash如果输出是
/usr/bin/bash,那把脚本第一行改成#!/usr/bin/bash,或者用更通用的#!/usr/bin/env bash,这样会自动找系统里的bash路径。
内容的提问来源于stack exchange,提问作者Ben Akin
相关产品推荐
相关产品推荐

