我有这个setup
文件:
function latest {
count=${1:-5} ;
echo "Just changed"
ls -lrtd * | tail -$count ;
}
我称之为:
. setup
然后我问 bash 是否latest
定义了函数:
>type latest
latest is a function
latest ()
{
count=${1:-5};
echo "Just changed";
ls --color=auto -lrtd * | tail -$count
}
Just changed
是一个任意字符串,我用来确保我没有latest
从另一个文件中查看定义。
问题是:为什么 Bash--color=auto
会在ls
命令中添加 (因为无论如何都是通过管道输出的,所以它没有用处)。是的,在我的外壳ls
上别名为ls --color=auto
,如果我删除别名,这不会发生。但我认为函数中没有使用的别名,无论如何这种替换发生在函数定义时?
您已经观察到记录在案的行为;在bash 手册的别名部分:
杰夫在上面是正确的。要查看 shell 中定义的别名,请在提示符处键入“alias”。
例子:
为了避免脚本中的别名,您需要取消“ls”命令的别名或直接调用它。要查找“ls”的位置,请使用内置的 shell 类型:
您可以将其放入变量中并使用该变量调用“ls”:
在第一种情况下,只调用“ls”会给出彩色输出,因为“ls”被别名为“ls --color=auto”,但第二种情况给出的输出没有颜色,因为别名被绕过了。
两个较旧的答案都是正确的,它们解释了 Bash 扩展别名的原因和时间。但是,如果您希望摆脱(烦人的)ls-alias,使某些目录列表在屏幕上以太相似的颜色无法读取,则要删除的别名的定义在文件 /etc/skel/.bashrc 中