运行Makefile脚本时“没有这样的文件或目录”

时间:2017-10-12 19:00:02

标签: makefile cassandra cql cqlsh iterm2

文件夹结构设置如下:

Main directory
  \_ keyspaces
    \_ f1
      \_ bootstrap.cql
      \_ anotherFolder
        \_ 0001-something.cql
    \_ f2
      \_ bootstrap.cql
      \_ anotherFolder
        \_ 0001-something.cql
        \_ 0002-moreSomething.cql

我在主目录中有一个Makefile,其中包含以下代码:

do_stuff:
    for ks in keyspaces/*; do \
        cqlsh -f "$${ks}/bootstrap.cql"; \
    done

当我从主终端内的终端(使用iTerm2)运行make do_stuff时,出现错误,说明如下:

Can't open 'keyspaces/f1/bootstrap.cql': [Errno 2] No such file or directory: 'keyspaces/f1/bootstrap.cql'
command terminated with exit code 1
Can't open 'keyspaces/f2/bootstrap.cql': [Errno 2] No such file or directory: 'keyspaces/f2/bootstrap.cql'
command terminated with exit code 1
make: *** [do_stuff] Error 1

但是,如果我在终端中运行它:cat keyspaces/f1/bootstrap.sql我打印出该文件的内容,所以路径是正确的,它确实存在,但是cqlsh无法识别它?

查看the Cassandra/cqlsh docs,看起来我正在使用-f命令,所以我不知道为什么我会收到错误。

1 个答案:

答案 0 :(得分:1)

我会从简单的步骤开始,以消除潜在的问题

.
├── Makefile
└── keyspaces
    ├── f1
    │   └── bootstrap.cql
    └── f2
        └── bootstrap.cql

使用以下Makefile,工作正常

do_stuff:
    for ks in keyspaces/*; do \
        cat "$${ks}/bootstrap.cql"; \
    done

执行

make
for ks in keyspaces/*; do \
      cat "${ks}/bootstrap.cql"; \
    done
a
b

仔细检查,您可以在Main directory内拨打

cqlsh -f "keyspaces/f1/bootstrap.cql"

也许你可以将其委托给find

do_stuff:
    find `pwd` -name "*.cql" -exec cat {} \;