麻烦“生成”bash别名

har*_*ski 0 linux bash shell bash-alias macos

在我的 中~/.shortcuts,我有一些常用目录的符号链接。

.bashrc(OS X)中,我这样做:

ls -1 ~/.shortcuts | xargs -I {} alias {}="'cd -P ~/.shortcuts/{}'"

当我alias在终端中运行时,输出显示新添加的别名,但没有一个别名有效。为什么?

我有一些别名,如alias ll='ls -l'.bash_aliases. 这样. ~/.bash_aliases.bashrc负载我的自定义别名得很清楚。但是,当我将xargs -t输出重定向到 tmp 文件并在 bashrc 中获取它(就像我的 source 一样.bash_aliases)时,它不起作用。

我究竟做错了什么?

Mat*_*Mat 5

它不起作用,因为它alias在一个子shell 中运行,该子shell 之后立即退出。它永远不会影响启动管道的外壳。

你应该尝试这样的事情:

for short in ~/.shortcuts/* ; do
  alias $(basename $short)="cd -P $short"
done
Run Code Online (Sandbox Code Playgroud)

这假设您在该文件夹中没有名称中包含有趣字符(如空格)的文件。

(一般来说,不要解析 的输出ls,使用 shell 的 globbing 函数。)