我试图将 awk 命令的输出作为 bash 脚本中的变量传递,但没有取得太大成功,因此如能得到任何帮助我都会感激不尽。
homedirectory=$(awk /stephen/ /etc/passwd | awk -F/home/ '{print $2}' | awk -F/downloads '{print $1}')
echo '$homedirectory'
我想从/etc/passwd中提取用户stephen的主目录,所以我想要的结果是0001
/etc/passwd
statd:x:102:65534::/var/lib/nfs:/bin/false
bind:x:103:106::/var/cache/bind:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
mysql:x:105:107:MySQL Server,,,:/var/lib/mysql:/bin/false
messagebus:x:106:108::/var/run/dbus:/bin/false
stephen:x:1039:1031::/home/0001/downloads:/bin/false
答案1
别看/etc/passwd
。echo ~username
,在你的情况下echo ~stephen
会做你想做的事。
从你的/etc/passwd
结果来看
$ echo ~stephen
/home/0001
$ basename `echo ~stephen`
0001
编辑:这是在编辑对您的/etc/passwd
内容应用正确格式之前。我没有注意到主目录是/home/0001/downloads
。您所要求的是一个并不总是会产生一致结果的东西,除非您始终期望被检查用户的主目录位于/home
。有无数种方法可以做到这一点,大多数方法都会有些错误,除非您提供有关预期约束的信息。
无论如何,请将过滤应用于 的输出echo ~username
。此后,您可以使用各种实用程序,例如basename
、awk
、sed
、cut
等。
答案2
废弃已有资源并使用:
getent passwd stephen | cut -d: -f6
甚至
cd ~stephen && pwd
答案3
您的三个 awk 起作用了(尽管正如其他人所说,它本来可以做得更好)。
最后一个问题是,echo '$homedirectory'
因为echo "$homedirectory"
shell 查看双引号内而不是单引号内。