1

当我尝试这个简单的脚本时:

#!/bin/bash
#append csv

FILES= /home/stef/test/*

for f in $FILES do
        cat $f >> ~/test.txt done

我收到以下错误:

./append.sh: line 4: /home/stef/test/test2.txt: Permission denied.

我究竟做错了什么?

4

4 回答 4

5

代替

FILES= /home/stef/test/*

FILES=/home/stef/test/*

该脚本正在尝试评估 /home/stef/test/* 的第一个匹配项。它说权限被拒绝,因为该文件不可执行。

./append.sh: line 4: /home/stef/test/test2.txt: Permission denied.

那是第 4 行。FOO= *在非空目录中尝试使用。

而且你的for ... do; done语法也很糟糕,done需要一个分隔符(;或换行符),“”也是如此do。然而,这不是产生此错误消息的原因。

于 2012-09-14T10:17:28.800 回答
2

您需要在代码中进行此更改:

#!/bin/bash
#append csv

FILES=/some_path/*

for f in $FILES
do
        cat $f >> ~/test.txt
done

不要忘记在 FILE 行中的路径之前删除 whitepsace,

于 2012-09-14T10:09:47.133 回答
0

缺少语句分隔符:修复它或者像

for f in $FILES do
        cat $f >> ~/test.txt 
done

或者

for f in $FILES do
        cat $f >> ~/test.txt; done
于 2012-09-14T10:20:36.693 回答
0

请注意,如果您的任何文件名有空格,您就会遇到问题。当您使用 迭代变量时for,您正在迭代该变量中以空格分隔的单词。为了安全地遍历文件,无论名称中是否包含空格,都不要将文件列表存储在普通变量中。

最直接的方式:

for f in /home/stef/test/*; do
  # ...

如果要将文件名保存在某种容器中,则需要使用数组:

files=( /home/stef/test/* )
for f in "${files[@]}"; do
  # ...
于 2012-09-14T13:37:50.993 回答