(编辑:导致问题的拼写错误。请参阅现有答案的评论)
我想stat
一个符号链接到另一个文件的文件,并认为我可以使用子shell和readlink命令替换来完成这项工作。对于上下文,我要提一下,这是在OS X 10.8.3(达尔文)上。
但我遇到了一个拒绝许可的错误。
ujagtahb@ujags-Retina-MBP-5.local:~/Code_Pen/c_exp$(cd /usr/share/locale/; stat $(en_US/LC_COLLATE))
bash: en_US/LC_COLLATE: Permission denied
727393128 1449 crw--w---- 1 ujagtahb tty 268435496 0 "Aug 12 11:36:50 2013" "Aug 12 11:36:51 2013" "Aug 12 11:36:51 2013" "Aug 12 11:36:51 2013" 131072 0 0 (stdin)
我检查了readlink命令的输出,果然,我没有看到任何错误。
ujagtahb@ujags-Retina-MBP-5.local:~/Code_Pen/c_exp$readlink /usr/share/locale/en_US/LC_COLLATE
../la_LN.US-ASCII/LC_COLLATE
stat
文件直接引发了没有错误并产生了我需要的输出。
ujagtahb@ujags-Retina-MBP-5.local:~/Code_Pen/c_exp$stat /usr/share/locale/la_LN.US-ASCII/LC_COLLATE
16777218 284538 -r--r--r-- 1 root wheel 0 2086 "Aug 12 11:36:51 2013" "Jul 22 07:55:02 2012" "Jul 22 07:55:02 2012" "Jun 21 01:35:25 2012" 4096 0 0x20 /usr/share/locale/la_LN.US-ASCII/LC_COLLATE
在一个案例中导致许可被拒绝的原因是什么?
答案 0 :(得分:1)
$(en_US/LC_COLLATE)
将执行字符串en_US/LC_COLLATE
作为命令(脚本)。
由于它没有执行权限,shell将输出该错误。
可能你想这样做:
$(cd /usr/share/locale/; stat en_US/LC_COLLATE)
答案 1 :(得分:1)
此:
(cd /usr/share/locale/; stat $(en_US/LC_COLLATE))
表示“打开子shell,cd
到/usr/share/locale
,运行命令en_US/LC_COLLATE
,然后在输出上运行stat
。< / p>
但我认为您要运行的命令是readlink en_US/LC_COLLATE
,而不是en_US/LC_COLLATE
;这样:
(cd /usr/share/locale/; stat $(readlink en_US/LC_COLLATE))
(我猜这只是一个错字?)