Joh*_*uhy 10 unix freebsd macos
没有意识到我打开了大写锁定,我CD在我的 Mac 上输入了命令提示符。令人惊讶的是,它没有出错。
which CD给我看/usr/bin/CD。如果我检查该文件,它看起来像这样:
#!/bin/sh
# $FreeBSD: src/usr.bin/alias/generic.sh,v 1.2 2005/10/24 22:32:19 cperciva Exp $
# This file is in the public domain.
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}
Run Code Online (Sandbox Code Playgroud)
我想这与将大写转换为小写有关,但${0##*/}对我来说完全不透明。 man CD告诉我“没有手动输入”。有人可以解释这个命令吗?
编辑:好的,我只是注意到 OSX 的文件系统不区分大小写,所以这个文件实际上是/usr/bin/cd. 但是如果我cd正常打字,我当然会得到内置的,所以/usr/bin/cd只有当我的情况出错时才会被调用。我还是想知道它的作用。
use*_*889 12
似乎它根本没有做太多事情:
“我将在这里回忆一些旧的记忆,所以我无法提供非常详细的解释,但 /usr/bin/cd 存在的原因是由于与别名相关的 POSIX 要求,并且无法通过转义使用别名. 但是 /usr/bin/cd 是一个无用的脚本,因为如果您在 shell 脚本中运行 cd 目录更改仅适用于运行脚本的子 shell。cd 不能是 shell 脚本。
此外,该脚本是一个通用脚本,因为它用于许多命令,而不仅仅是 cd。
我注意到
/usr/bin/cd我的 10.4 系统上的硬链接数为 15 [...]”
在该线程中进一步向下:
“我的一个朋友告诉我,“${0##*/}”的意思是“接受命令,但删除它的路径”(即,将“/usr/bin/cd”转换为“cd”)。”
因此,脚本似乎删除了路径,将结果转换为小写,然后附加原始参数。
| 归档时间: |
|
| 查看次数: |
2111 次 |
| 最近记录: |