Bash脚本中alias cp='cp -i'未按预期弹出覆盖提示问题
问题原因
Bash脚本运行属于非交互式shell环境,默认会禁用别名扩展(expand_aliases选项关闭),所以即便在脚本里定义了cp的别名,执行cp命令时依然会调用原始的cp命令,不会触发别名的-i参数。
解决方案
有两种可靠的解决方式:
方式1:开启别名扩展
在脚本中添加shopt -s expand_aliases命令开启别名扩展,需确保该命令在执行cp前生效:
#!/bin/bash shopt -s expand_aliases # 开启别名扩展 alias cp='cp -i' alias # 确认别名生效 touch /tmp/{a,b}.txt cp /tmp/a.txt /tmp/b.txt # 此时会弹出覆盖确认提示
方式2:使用函数替代别名(推荐)
用函数替代别名更稳定,函数优先级高于别名,且无需依赖扩展设置:
#!/bin/bash cp() { command cp -i "$@" } touch /tmp/{a,b}.txt cp /tmp/a.txt /tmp/b.txt # 会弹出覆盖确认提示
其中command关键字用于避免函数递归调用自身,确保调用的是原始cp命令。
内容的提问来源于stack exchange,提问作者Adooo
相关产品推荐
相关产品推荐

