我在执行 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