当我尝试这个简单的脚本时:
#!/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.
我究竟做错了什么?
代替
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
。然而,这不是产生此错误消息的原因。
您需要在代码中进行此更改:
#!/bin/bash
#append csv
FILES=/some_path/*
for f in $FILES
do
cat $f >> ~/test.txt
done
不要忘记在 FILE 行中的路径之前删除 whitepsace,
缺少语句分隔符:修复它或者像
for f in $FILES do
cat $f >> ~/test.txt
done
或者
for f in $FILES do
cat $f >> ~/test.txt; done
请注意,如果您的任何文件名有空格,您就会遇到问题。当您使用 迭代变量时for
,您正在迭代该变量中以空格分隔的单词。为了安全地遍历文件,无论名称中是否包含空格,都不要将文件列表存储在普通变量中。
最直接的方式:
for f in /home/stef/test/*; do
# ...
如果要将文件名保存在某种容器中,则需要使用数组:
files=( /home/stef/test/* )
for f in "${files[@]}"; do
# ...