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