我目前正在尝试创建一个函数,该函数可使用以下函数来检索文件所有者名称:
OWNER_IDX=3
fileowner=""
#Gives file owner name. Takes the file name as an argument
function getfileowner()
{
fileowner=`ls -l | grep $1 | cut -f $OWNER_IDX -d " "`
echo $fileowner
}
为了验证我的功能到底能做什么,我创建了一个测试功能:
function testgetfileowner()
{
for file in `ls`
do
getfileowner $file
echo "$file belongs to $fileowner"
done
}
但是当我执行脚本时,会得到以下输出:
exemple_gz.gz belongs to
exemple_tar.tar belongs to
exemple_tgz.tgz belongs to
exercice_10.sh belongs to
exercice_8.sh belongs to
INFOH304 belongs to
lipap.sh belongs to
我测试线路
fileowner=`ls -l | grep $1 | cut -f $OWNER_IDX -d " "`
在终端上如下:
ls -l | grep exemple_gz.gz | cut -f 3 -d " "
,效果很好。我做错了什么?提前致谢。
答案 0 :(得分:2)
$fileowner
从未在测试中设置为任何值,您应该在getfileowner
中返回该值。
此外,正如我在评论中所说,您可以直接使用stat -c %U filename
来获取用户名。
您的函数还有另一个问题:ls -l | grep $1
可以匹配多个文件并且是多余的,而ls -dl $1
可以直接执行您想要的操作,-d
可以列出目录本身,而不是列出目录其内容。
答案 1 :(得分:0)
如this所示,另一种解决方案是在stdout上打印而不是返回值并用命令替换捕获它。
#Gives owner name. Takes the file name as an argument
function getfileowner()
{
echo "`ls -ld $1 | cut -f $OWNER_IDX -d " "`"
}
function testgetfileowner()
{
for file in *
do
echo "$file belongs to $(getfileowner $file)"
done
}