我尝试在Bash中迭代一个关联数组.它似乎很简单,但循环不遵循数组的初始顺序......我不明白错误在哪里:/
这是一个简单的脚本:
#!/bin/bash
echo -e "Workspace\n----------";
lsb_release -a
echo -e "\nBash version\n----------";
echo -e $BASH_VERSION."\n";
declare -A groups;
groups["group1"]="123";
groups["group2"]="456";
groups["group3"]="789";
groups["group4"]="abc";
groups["group5"]="def";
echo -e "Result\n----------";
for i in "${!groups[@]}"
do
echo "$i => ${groups[$i]}";
done
Run Code Online (Sandbox Code Playgroud)
输出 :
Workspace
----------
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.2 LTS
Release: 14.04
Codename: trusty
Bash version
----------
4.3.11(1)-release.
Result
----------
group3 => 789
group2 => 456
group1 => 123
group5 => def
group4 => abc
Run Code Online (Sandbox Code Playgroud)
为什么我没有"group1","group2"等?
我不希望有一个alphanum顺序,我只是想循环遵循数组的初始声明的顺序...
有办法吗? …
在尝试使用Dockerspec测试Dockerfiles后,我终于遇到了一个无法正确解决的问题.
我认为问题来自Docker本身; 如果我理解它的进程,一个Entrypoint只在运行时执行,但如果容器保持启动并且我启动了一个"exec"命令,则不会重新调用它.
我认为这是通缉行为.
但是,如果入口点是" 古薮 "脚本,我之前所有的命令,这是个问题......
例
"myImage"有这个入口点:
gosu 1000:1000 "$@"
如果我发布: docker run -it myImage id -u
输出为"1000".
如果我开始一个容器: docker run -it myImage bash
在此容器中,id -u
输出"1000".
但是如果我在这个容器中启动一个新命令,它会启动一个新的shell,并且不执行Entrypoint,所以: docker exec CONTAINER_ID id -u
输出"0",因为新shell以"root"身份启动.
有没有办法每次执行入口点?或者重新使用shell打开?
或者更好的方法呢?
或者,也许我什么都不懂?;)
谢谢 !
编辑
在阅读了这里提出的解决方案之后,我明白问题不在于Docker如何工作,而在于Serverspec如何工作; 我的目标是直接测试命令作为docker run
参数,但Serverspec启动容器和测试命令docker exec
.
因此,最好的解决方案是找到如何获取docker run
Serverspec执行的stdout.
但是,在我的个人用例中,最好的解决方案可能是不使用Gosu但是--user flag :)
我正在尝试将变量注入到forRoot({[...]})
Angular 模块的方法中。
我以异步方式获取了这个变量,所以我尝试在引导 Angular之前获取它。(它来自cordova.js)
问题:
似乎 Angular 在引导之前导入模块(并调用“forRoot”方法)。
有没有办法实现这一目标?
谢谢 !
我尝试过的一个例子:
app.module.ts
import {NgModule} from '@angular/core';
import {AgmCoreModule} from '@agm/core';
@NgModule({
imports: [
AgmCoreModule.forRoot({
apiKey: window['device'].platform, // value is 'null' instead of 'browser' or something else
libraries: ['places']
})
],
// [...]
bootstrap: [AppComponent]
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)
src/main.ts
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { …
Run Code Online (Sandbox Code Playgroud) 我尝试在shell脚本中有一个网页的"实时输出"; 解释,一个小例子:
这个"localhost/index.php"是这样的:
<?php
header('Content-type: text/html; charset=utf-8');
echo 'Start<br />'.PHP_EOL;
for( $i = 0 ; $i < 10 ; $i++ )
{
echo '.';
flush();ob_flush();
sleep(1);
}
echo PHP_EOL.'<br />End';
?>
Run Code Online (Sandbox Code Playgroud)
我想写一个shell脚本,允许每秒出现的屏幕上有"点".
如果我试试这个:
#!/bin/bash
curl 'localhost/index.php'
Run Code Online (Sandbox Code Playgroud)
它仅显示每个分隔线后的输出...不是每次更新后(或PHP脚本中的"echo")如果管道这个,所有输出将显示在最后:/
有没有办法让实时输出,比如在浏览器中?
我使用 Angular CLI 9 构建了一个应用程序。我package.json
使用以下命令修补了该文件:
{
"scripts": {
"build:prod": "ng build --prod --subresource-integrity",
"prebuild:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' ts-node ./sitemap_generator.ts"
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我调用 时npm run build:prod
,我的 2 个命令将被执行,并且编译器生成的输出文件包含 SRI。
现在,我添加了 appShell :
npm run ng generate appShell -- --client-project my-project
要使用appShell运行构建,我必须使用以下命令:
npm run ng run my-project:app-shell:production
主要问题
但是这个命令调用文件my-project:build:production
的配置angular.json
,并且不接受参数--subresource-integrity
:/
如何修补它以使用SRI 进行 appShell 生产构建?
勇敢者的第二个问题
此 appShell 构建server/
在 中创建一个文件夹dist/
。它只包含一个main.js
文件。我想它在 Node 内部使用来构建 appShell ;有人可以证实吗?那么,我也可以使用 Unversal …