0

(编辑:有一个错字导致问题。请参阅现有答案的评论)

我想要stat一个符号链接到另一个文件的文件,并认为我可以使用 subshel​​l 和 readlink 命令替换来完成这项工作。对于上下文,让我提一下这是在 OS X 10.8.3 (Darwin) 上。

但是我遇到了一个权限被拒绝的错误。

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

是什么导致许可在一种情况下被拒绝,但在另一种情况下却没有?

4

2 回答 2

1
$(en_US/LC_COLLATE)

将字符串en_US/LC_COLLATE作为命令(脚本)执行。

由于它没有执行权限,shell 将输出该错误。

可能你想这样做:

$(cd /usr/share/locale/; stat en_US/LC_COLLATE)
于 2013-08-12T06:25:55.897 回答
1

这个:

(cd /usr/share/locale/; stat $(en_US/LC_COLLATE))

意思是“打开一个子shell,cd运行命令/usr/share/locale,然后在输出上运行”。en_US/LC_COLLATEstat

但我认为您要运行的命令是readlink en_US/LC_COLLATE,不是en_US/LC_COLLATE;所以:

(cd /usr/share/locale/; stat $(readlink en_US/LC_COLLATE))

(我猜这只是一个错字?)

于 2013-08-12T06:26:20.963 回答