在目录Unix TCSH脚本中迭代文件时的权限

在目录Unix TCSH脚本中迭代文件时的权限,unix,permissions,tcsh,Unix,Permissions,Tcsh,我正在编写一个脚本,它将打印主目录子目录中每个文件的文件名。我的代码是: foreach file (`~/.garbage`) echo "$file" end 当我尝试运行脚本时,出现以下错误: home/.garbage: Permission denied. 我已尝试将.garbage目录和脚本的权限设置为755,但无法克服此错误。我有没有做错什么?这是一个tcsh脚本。为什么不直接使用ls~/.garbage 或者,如果您想将每个文件放在单独的一行中,ls-1~/.gar

我正在编写一个脚本,它将打印主目录子目录中每个文件的文件名。我的代码是:

foreach file (`~/.garbage`)
     echo "$file"
end
当我尝试运行脚本时,出现以下错误:

home/.garbage: Permission denied.

我已尝试将.garbage目录和脚本的权限设置为755,但无法克服此错误。我有没有做错什么?这是一个tcsh脚本。

为什么不直接使用
ls~/.garbage


或者,如果您想将每个文件放在单独的一行中,
ls-1~/.garbage
backtic将尝试执行其中的任何内容。由于您在backtic中提供目录名,因此出现此错误


您可以像Mark提到的那样在backtics中使用
ls~/.garbage
,或者在引号中使用
~/.garbage/*
,并依靠shell为您扩展glob。如果只想从完整路径中获取文件名;使用
basename
命令或一些sed/awk magic

backticks试图调用程序
~/.garbage
。你可能不想这么做,我去掉了虱子,它成功了。但是现在我有另一个问题。for循环只执行一次,但.garbage中有3个文件。我的目录格式是否仍然不正确?
~/.garbage/*
可能就是您要查找的内容-没有对目录进行隐式搜索,因此它只使用路径名。您可能使用了一些以前使用过的带有反勾号的
ls~/.garbage
,这实际上列出了目录的内容。星号用路径打印正确的文件。有没有办法只打印.garbage中每个文件的文件名?或者我需要对grep或sed做些什么?