0

我最近刚刚制作了这个脚本:

 if test -s $HOME/koolaid.txt ; then
  Billz=$(grep / $HOME/koolaid.txt)
  echo $Billz
  else
 Billz=$HOME/notkoolaid
 echo $Billz
 fi



 if test -d $Billz ; then
  echo "Ok"
 else touch $Billz
fi

所以基本上,如果文件$HOME/koolaid.txt文件不存在,那么 Billz 将被设置为 $HOME/koolaid.txt。然后它成功地创建了文件。

但是,如果我确实制作了 koolaid.txt,那么我会得到这个

mkdir: cannot create directory : No such file or directory

任何帮助,将不胜感激

4

2 回答 2

1

这是变量内容和评估内容之间的区别......如果您的变量包含一个字符串$HOME/some-您需要扩展它以获得/home/login/same 一个危险的方法是eval.

bin=$(grep / ~/.rm.cfg)
eval rbin=${bin:-$HOME/deleted}
echo "==$rbin=="

除非您绝对确定要评估的内容,否则不要评估...

于 2013-06-20T20:28:33.073 回答
0

这里有几件事要解决:

以“shebang”开始您的脚本,例如:

#!/bin/sh

这样,shell 就会知道您想将其作为 Bourne shell 脚本运行。

此外,脚本顶部的条件不能很好地处理 .rm.cfg 存在但在其中任何地方不包含斜杠字符的情况。在这种情况下, rbin 变量永远不会被设置。

最后,尝试添加该行

ls ~

在顶部,您可以看到 shell 如何解释波浪号字符;这可能是问题所在。

于 2013-06-20T20:00:44.110 回答