gpt4 book ai didi

bash - 如何动态更新 .bashrc 文件中的别名?

转载 作者:行者123 更新时间:2023-11-29 09:51:57 24 4
gpt4 key购买 nike

我在部门 .bashrc 文件中定义别名,该文件在个人用户 .bashrc 文件之前获取。在个人用户 .bashrc 文件中,我希望能够向现有别名添加选项。因此,例如在第一个(部门).bashrc 文件中,我有以下内容:

alias my_command = '/usr/local/bin/my_command -option1 -option2'

在用户 .bashrc 文件中,我想在现有别名的基础上构建,例如

alias my_command = 'my_command -option3'

如所写,用户 .bashrc 文件中的别名指令将简单地替换部门 .bashrc 文件中定义的同名别名。我试图通过以下方法解决这个问题:

existing_alias_components=($(type my_command))

在数组的前四个元素中返回单词 my_command、is、aliased 和 to。我想捕获剩余的数组元素,将它们连接回一个字符串——比如 $string——然后​​发出命令

alias my_command="$string -option 3"

我遇到了挑战,因为围绕别名的第一个定义的引号字符进入了前四个数组值之后的第一个和最后一个数组值。我可以将它们子字符串化,但是对于 perl 中的单行代码来说需要做很多工作。有没有更方便的方法来实现这一点?

谢谢!

最佳答案

考虑改用函数。例如:

my_command_args=( -option1 -option2 )
my_command() {
command my_command "${my_command_args[@]}" "$@"
}

...之后有人可以运行:

# add a 3rd option on the end:
my_command_args+=( -option-3 )

...或者,添加一个新参数:

# add a 0th option on the beginning
my_command_args=( -option0 "${my_command_args[@]}" )

这里的一大优势是您可以将数据附加到您的别名,而无需安全地引用它。例如,下面的别名将是非常糟糕的消息:

# This is evil
bad_string='$(rm -rf /tmp)'
alias my_command="$oldalias --fail-if-command-contains=$bad_string"

...需要通过类似printf '%q' 的方式运行:

# ...can make it safer this way, if using an alias
bad_string='$(rm -rf /tmp)'
printf -v bad_string_safe %q "$bad_string"
alias my_command="$oldalias --fail-if-command-contains=$bad_string_safe"

...但是如果使用函数公式,那么没有这一步将是非常安全的:

# This is safe
bad_string='$(rm -rf /tmp)'
my_command_args+=( --fail-if-command-contains="$bad_string" )

关于bash - 如何动态更新 .bashrc 文件中的别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37357630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com