Bash别名未按预期替换

时间:2017-09-23 03:57:25

标签: bash

我正在尝试为S3存储桶的名称设置别名,以便在传输文件时不必经常输入它。

在我的.bash_profile中:

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”是我的〜/ .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

错误消息清楚地显示了第一个别名,因为我收到“aws s3”使用错误,但第二个别名没有被触发。用set -x尝试调试并得到:

as3 cp upload.sh artifacts admin
+ aws s3 cp upload.sh artifacts admin

除非bash检测到递归别名替换并以钝误的方式阻止它,否则我对所发生的事情感到茫然。

FYI:我是一个自称为bash noob的人,要温柔。 (是的,我采购了.bash_profile)

2 个答案:

答案 0 :(得分:1)

您在Bash中使用变量混淆aliasalias只能用作命令的开头。

参数可以是变量:

alias as3="aws s3"
artifacts="s3://dev-artifacts-bucket-name"
admin="--profile admin-user"

然后你可以:

as3 cp localFile.txt $artifacts/ $admin

答案 1 :(得分:0)

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

def get_first_element(MyModel):
    my_query =  your query //may return multiple results
    return my_query[:1]

要使用它,请将文件传递给上传作为参数:

upload_as_admin () {
    aws s3 cp "$1" s3://dev-artfacts-bucket-name --profile admin-user
}