linux附加文本命令未找到

时间:2012-09-14 10:07:45

标签: linux bash

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

#!/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 个答案:

答案 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
  # ...