chroot需要CAP_SYS_CHROOT按照说明书进行。该unshare命令使用 chroot。
该命令unshare -UrR newroot/无需运行即可工作root,这是有道理的,因为该-r标志使我们root位于名称空间内,从而为我们提供了CAP_SYS_CHROOT功能。
问题开始时unshare -UR newroot/不需要运行为root,而unshare -U chroot newroot/会给我Operation not permitted错误。因此,在第一个中,我不要求位于root用户名称空间内,第二个是相同的,但尝试手动执行。
检查代码,使用时发生的唯一一件事-R是将newrootto设置为optarg,所以我无法理解为什么在一个示例中它有效,而在另一个示例中却无效。
我创建了这个文件夹结构:
\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 terragrunt.hcl\nRun Code Online (Sandbox Code Playgroud)\n# FILE: terragrunt.hcl\n\ninclude {\n path = find_in_parent_folders()\n}\n\nlocals {\n common_vars = read_terragrunt_config(find_in_parent_folders("common.hcl"))\n cluster_name = local.common_vars.locals.cluster_name\n}\n\nterraform {\n source = "./main.tf"\n}\nRun Code Online (Sandbox Code Playgroud)\n# FILE: main.tf\n\nmodule "tags" {\n source = "..."\n\n eks_cluster_names = [local.cluster_name]\n}\n\nmodule "vpc" {\n source = "..."\n\n aws_region = local.common_vars.locals.aws_region\n \n ...\n\n vpc_custom_tags = module.tags.vpc_eks_tags\n \n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n但对于local.我尝试使用的每一个,我都会收到一个错误:
A local value with the name "blabla" has not been declared\nRun Code Online (Sandbox Code Playgroud)\n所以现在我正在尝试找出一种方法来实现这项工作。我考虑遵循how-to-access-terragrunt-variables-in-terraform-code,但我不想创建一个variables.tf. 另外,另一个问题是我必须重新定义 中模块的所有输出main.tf,是否有更好的方法来做到这一点?
是否有一个我可以遵循的良好实践结构?我怎样才能将这些当地人“传播”terragrunt.hcl …
我一直盯着这段代码,但无法弄清楚其行为的原因。
package main
import (
"fmt"
)
var i int
func example() int {
defer func() {
fmt.Println("defer")
i = 1
}()
fmt.Println("first")
return i
}
func main() {
fmt.Println(example())
fmt.Println(i)
}
Run Code Online (Sandbox Code Playgroud)
首先,我的预期输出是:
first
defer
1
1
Run Code Online (Sandbox Code Playgroud)
但是,正如您在操场上看到的,实际输出是:
first
defer
0
1
Run Code Online (Sandbox Code Playgroud)
这是延迟匿名函数行为吗?没有
那么,为什么要打印呢0?