Bash别名未按预期替换

Bash别名未按预期替换,bash,Bash,我试图给S3 bucket的名字加上别名,以避免在传输文件时不断输入它 在我的.bash_配置文件中: alias as3="aws s3" alias artifacts="s3://dev-artifacts-bucket-name" alias admin="--profile admin-user" 使用别名的所需命令示例: as3 cp localFile.txt artifacts/ admin 应决心: aws s3 cp localFIle.txt s3://dev-arti

我试图给S3 bucket的名字加上别名,以避免在传输文件时不断输入它

在我的.bash_配置文件中:

alias as3="aws s3"
alias artifacts="s3://dev-artifacts-bucket-name"
alias admin="--profile admin-user"
使用别名的所需命令示例:

as3 cp localFile.txt artifacts/ admin
应决心:

aws s3 cp localFIle.txt s3://dev-artifacts-bucket-name/ --profile admin-user
其中,admin user是在my~/.aws/config文件中配置的IAM角色的名称

相反,我得到了一个错误:

as3 cp ./upload.sh artifacts/ admin

Unknown options: admin
或者当我消除配置文件别名时

as3 cp ./upload.sh artifacts/ --profile admin-user

usage: aws s3 cp <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>
Error: Invalid argument type
除非bash检测到递归别名替换并用一个钝错误停止它,否则我对所发生的事情一无所知

仅供参考:我是一个自诩为巴什努伯的人,温柔一点。 是的,我获取了.bash_配置文件

您将bash中的别名与变量混淆了。别名只能用作命令的开头

参数可以改为变量:

alias as3="aws s3"
artifacts="s3://dev-artifacts-bucket-name"
admin="--profile admin-user"
然后你可以:

as3 cp localFile.txt $artifacts/ $admin

与其定义几个单独的变量,不如定义一个函数来包装整个命令:

upload_as_admin () {
    aws s3 cp "$1" s3://dev-artfacts-bucket-name --profile admin-user
}
要使用它,请将要上载的文件作为参数传递:

upload_as_admin localFile.txt

我将使用as3 cp localFile.txt${artifacts}/${admin}。$admin不能被引用,因为它包含两个用作单独参数的单词。这两个变量都不需要导出,但admin要么不带引号,要么替换为array admin=-profile admin user,后跟as3 cp localFile.txt$artifacts/${admin[@]}。这只能解决这个确切的用例。其目的是能够执行任意操作,如列出、删除和构建可组合的快捷方式。见我对威尔回答的评论。
upload_as_admin localFile.txt