![Bash 别名的替代品(其行为基本上类似于别名,但不是别名)](https://linux22.com/image/126334/Bash%20%E5%88%AB%E5%90%8D%E7%9A%84%E6%9B%BF%E4%BB%A3%E5%93%81%EF%BC%88%E5%85%B6%E8%A1%8C%E4%B8%BA%E5%9F%BA%E6%9C%AC%E4%B8%8A%E7%B1%BB%E4%BC%BC%E4%BA%8E%E5%88%AB%E5%90%8D%EF%BC%8C%E4%BD%86%E4%B8%8D%E6%98%AF%E5%88%AB%E5%90%8D%EF%BC%89.png)
我需要一个 Bash 别名的 A 替代品(其行为基本上类似于别名,但不是别名)。
我需要这样的替代品的原因是因为脚本无法使用别名。也就是说,当我在 Bash 中手动执行别名时,它可以正常工作,但作为脚本的一部分运行时,它就无法工作。我知道的解决方案是将别名放入临时文件中,但我不想要这种方法。
是否有任何替代/类似的命令快捷方式我可以利用,一些“下一代别名”(给出一个比喻),其行为就像别名一样,但也可以自然地供脚本访问(在获取其文件之后)?
答案1
在man bash
:
当 shell 非交互式时,别名不会扩展,除非扩展别名shell 选项设置使用肖普特。
所以,我认为你需要添加shopt expand_aliases
到你的bash
脚本中。
测试:
$ cat 1.sh
#!/bin/bash
alias ll='ls -l'
ll $HOME
$ ./1.sh
./1.sh: line 3: ll: command not found
$ cat 2.sh
#!/bin/bash
shopt -s expand_aliases
alias ll='ls -l'
ll $HOME
$ ./2.sh
total 12
...