在linux 下执行shell文件提示:No such file or directory,但这个路径明明是存在的,为啥呢?求指教?

这个路径是重txt文档中读出来的,让后用的一个变量,如果在程序中直接使用“~/jre/log1”就没有问题~... 这个路径是重txt文档中读出来的,让后用的一个变量,如果在程序中直接使用“~/jre/log1”就没有问题~ 展开
 我来答
百度网友853f739
推荐于2017-04-13 · TA获得超过145个赞
知道小有建树答主
回答量:110
采纳率:100%
帮助的人:87万
展开全部

这个问题应该出在find命令上,在脚本中你的路径“~/jre/log1”被保存在一个变量中$logPath

在脚本中:find $logPath -ctime +7这条命令,find把“~”当成普通字符,而不会解析为对应的home目录。

在命令行(shell环境下)环境下:为什么cd ~/jre/log1成功,是因为shell帮你解析“~”为对应的home目录了。

所以如果在脚本中使用find命令,且用“~”表示要使用当前用户home目录,可以结合eval命令使用:

#!/bin/bash

logpath=$(cat /tmp/test.txt) 获取带有~的路径
find $(eval echo $logpath) -name "*.txt" 使用eval计算表达式结果
103987105
推荐于2018-03-02 · TA获得超过112个赞
知道小有建树答主
回答量:170
采纳率:100%
帮助的人:89.4万
展开全部
cat ~/jre/log...
用绝对路径
比如 cat /home/my/name/jre/log....

写脚本用相对路径是大忌啊
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaotu0427
2013-07-25 · TA获得超过476个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:258万
展开全部
如果你没进行chmod +x 你的脚本名的话,就用bash 你的脚本名字来执行,如果你执行过了,就使用./你的脚本名来执行,

前提是你的脚本OK
更多追问追答
追问

代码是这样的,应该没有问题啊,这里加了个显示logPath的代码,显示也是成功的

追答
你脚本写好了以后有没有给它可执行权限的,比如:chmod a+x test.sh
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
唐卫公
2013-07-25 · TA获得超过3.7万个赞
知道大有可为答主
回答量:9440
采纳率:76%
帮助的人:4469万
展开全部
你理解错了,除非特别加上,否则home directory不在$PATH里。用echo $PATH试试就清楚了。
追问
echo $PATH,这个现实的就是~/jre/log1,没有问题啊,我试过了
追答
$PATH里最好改用绝对路径。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式