首页 > shell脚本执行mkdir命令,报not found

shell脚本执行mkdir命令,报not found

我在执行 sh 文件的时候,执行到 mkdir 命令就很会报错。下面是我的代码:

#!/bin/bash

logFilePath="/usr/local/python/data_analysis_log/"

if [ ! -x "$logFilePath" ] ;
then
  mkdir "$logFilePath"
fi

报的错是:

test.sh: 7: test.sh:   mkdir: not found

环境是 ubuntu14.04

查了网上的一些资料,么有找到解决方案,请问各位有遇到过这样的问题吗?


已解决。。。去掉“;”就好了,我也不知道为什么。。。。。


实际上这个问题的原因不在于; 提示找不到命令,问题在PATH,解决的方法有如下:

1.指定路径

如果你能在login shell上执行mkdir,那么可以用:

/bin/mkdir "$logFilePath"    #指定该命令的地址

或者是像@enali说的那样export。

2.在subshell中执行

一般shell脚本的执行是会起一个child进程,这个进程会继承一些父进程的一些变量(所以像PATH这样就有可能没有被集成到),不过对于subshell而言,它所继承到的变量要比child进程多的多。同时subshell对父进程没有任何的影响。

( mkdir "$logFilePath" )

这样就可以了。


猜测

如果题主的/usr/local/python/目录存在, 则不会有错误; 如果不存在, 则因为没有使用-p选项, 创建多层目录时, 正确的错误信息是no such file or directory.

因此, 根据题主的信息, 建议执行which mkdir查看mkdir的执行路径, 但既然找不到mkdir, 前命令多半生效. 正常情况下, mkdir位于/bin/mkdir. 执行ls /bin | grep mkdir, 如果找不到, 则说明楼主的系统可能被改过.

其实, 更可能的原因是, /bin目录不在PATH中, 执行echo $PATH, 查找/bin目录是否存在. 在安装不同的软件时, 都可能更改PATH, 大部分情况下, 都会推荐用export PATH=$PATH:..., 但总有些软件会直接export PATH=....


mkdir -p

【热门文章】
【热门文章】