Terraform`local exec`设置本地别名

Terraform`local exec`设置本地别名,terraform,shell,alias,Terraform,Shell,Alias,我正在尝试设置一个别名,以便在中创建AWS实例时快速ssh到新创建的主机中。我通过跑步来做到这一点 # Handy alias to quickly ssh into newly created host provisioner "local-exec" { command = "alias sshopenldap='ssh -i ${var.key_path} ubuntu@${aws_instance.ldap_instance.public_dns}'" } 当我看到此执行的输出

我正在尝试设置一个别名,以便在中创建AWS实例时快速ssh到新创建的主机中。我通过跑步来做到这一点

# Handy alias to quickly ssh into newly created host
provisioner "local-exec" {
    command = "alias sshopenldap='ssh -i ${var.key_path} ubuntu@${aws_instance.ldap_instance.public_dns}'"
}
当我看到此执行的输出时:

aws_instance.ldap_instance (local-exec): Executing: /bin/sh -c "alias sshopenldap='ssh -i ~/.ssh/mykey.pem ubuntu@ec2-IP.compute-1.amazonaws.com'"
看起来还可以,但是没有设置别名。这可能是命令的运行方式将其包装到新的作用域中,而不是当前shell的作用域吗?如果我将命令原样复制粘贴到控制台,则别名设置良好

有解决办法吗


我正在运行terraform a MacOS X Mountain Lion's terminal。

确实不可能在脚本文件中为当前shell设置别名,这正是您要做的。摆脱这种情况的唯一方法是不运行脚本,而是将其源代码化。因此:

source somefile.sh

与其执行它,不如执行它。

您可以尝试以下方法:

# Handy alias to quickly ssh into newly created host
provisioner "local-exec" {
  command = "echo \"alias sshopenldap='ssh -i ${var.key_path} ubuntu@${aws_instance.ldap_instance.public_dns}'\" > script.sh && source script.sh && rm -rf source.sh"
}

不确定报价将如何转义…

谢谢@Stephan W.,我会尝试一下,然后返回给您。