在shell脚本中运行管道输出上的ls

时间:2015-04-16 19:00:53

标签: bash shell sh

我必须在一个脚本中执行以下操作。

/etc/passwd file to display user home directory ownership:

ls -lLd /<usershomedirectory>

我可以按照以下方式访问主路径,请根据使用单行脚本识别的用户主路径帮助我在主路径上运行ls。

grep "" /etc/passwd | cut -f 6 -d :

更新

如何做更多的事情

# ls -al /<usershomedirectory>/.login
# ls -al /<usershomedirectory>/.cschrc
# ls -al /<usershomedirectory>/.logout
# ls -al /<usershomedirectory>/.profile
# ls -al /<usershomedirectory>/.bash_profile
# ls -al /<usershomedirectory>/.bashrc
# ls -al /<usershomedirectory>/.bash_logout
# ls -al /<usershomedirectory>/.env
# ls -al /<usershomedirectory>/.dtprofile    
# ls -al /<usershomedirectory>/.dispatch
# ls -al /<usershomedirectory>/.emacs
# ls -al /<usershomedirectory>/.exrc

2 个答案:

答案 0 :(得分:6)

您可以使用反引号/命令输出替换:

ls -lLd "$(grep "^$username:" /etc/passwd | cut -f6 -d: )" 

或管道到xargs:

grep "^$username:" /etc/passwd | cut -f 6 -d: | xargs -r ls -lLd

(我还添加了一些更多的grep上下文,以确保用户完全匹配并支持文件名中的空白)

〜扩展可以与eval一起使用,不确定这是不是一个好主意:

eval "ls -lLd ~$username"

答案 1 :(得分:2)

正如@EtanReisner评论的那样,通常的做法是:

ls -lLd ~user

但是,如果你必须使用/etc/passwd的解析和替换,我会推荐这个特殊的配方:

ls -lLd $(awk -v acct="user" -F: '$1 == acct { print $NF-1 }' /etc/passwd)

但是有很多方法,其他答案也会证明......