小编mle*_*les的帖子

在bash中通过关联数组的foreach循环只返回最后一个元素

这应该将整个关联数组打印到控制台:

#!/bin/sh

declare -a array=([key1]='value1' [key2]='value2')

for key in ${!array[@]}; do
    echo "Key = $key"
    echo "Value = ${array[$key]}"
done

echo ${array[key1]}
echo ${array[key2]}
Run Code Online (Sandbox Code Playgroud)

相反,它打印oly最后一个变量:

[mles@sagnix etl-i_test]$ ./test.sh 
Key = 0
Value = value2
value2
value2
Run Code Online (Sandbox Code Playgroud)

我的错在哪里?

@htor:Bash版本是3.2.25(1) - 发布.

arrays bash shell

3
推荐指数
1
解决办法
5045
查看次数

data-toggle ="dropdown"激活路由重定向而不是自动下拉

我正在使用angular-bootstrap-datetimepicker,特别是"带输入框的下拉日期时间".它使用了data-toggle="dropdown"属性.当我在一个简单的nodejs express服务器上运行我的AngularJS App时,日历出现了.自从我迁移到自耕农后,点击下拉菜单会激活重定向到/#(http://localhost:9000/#)

这就是我在视图中使用datetimepicker的方式:

dtpform.html

<div class="dropdown">
    <a class="dropdown-toggle" id="dropdown2" role="button" data-toggle="dropdown" data-target="#" href="#">
        <div class="input-group"><input type="text" class="form-control" data-ng-model="startDate"><span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
        </div>
    </a>
    <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
        <datetimepicker data-ng-model="startDate" data-datetimepicker-config="{ dropdownSelector: '#dropdown2', minView: 'hour' }"/>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

其他有同样问题的人忘了一些依赖.我似乎已经全部准备好了.如果我将datetimepicker插入index.html而不是/ dtp路由,它会弹出.

的index.html

...
<!-- build:js(.) scripts/vendor.js -->
<!-- bower:js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
<script src="bower_components/angular-animate/angular-animate.js"></script>
<script src="bower_components/angular-cookies/angular-cookies.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
<script src="bower_components/angular-touch/angular-touch.js"></script>
<script src="bower_components/moment/moment.js"></script>
<script src="bower_components/angular-moment/angular-moment.js"></script>
<script …
Run Code Online (Sandbox Code Playgroud)

javascript node.js twitter-bootstrap angularjs yeoman

3
推荐指数
1
解决办法
1744
查看次数

在 bash 中使用 xmllint 从带有命名空间的 xml 文件中提取值

我需要从此 xml 中提取名称值(产品查找器):

文件:config.xml

<?xml version="1.0" encoding="utf-8"?>
<widget id="com.abc.app" version="1.3.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0" ios-CFBundleVersion="1.3.1.5" android-versionCode="5">
    <name>Product Finder</name>
    <description>
        Description
    </description>
</widget>
Run Code Online (Sandbox Code Playgroud)

我试过了:

mles$ xmllint --xpath "/widget/name/text()" config.xml 
XPath set is empty
Run Code Online (Sandbox Code Playgroud)

这可能是因为我的config.xml文件有其他命名空间。根据这个问题,我需要手动设置名称空间。所以我尝试过:

mles$ xmllint --shell config.xml / > setns x=http://www.w3.org/ns/widgets / > xpath /x:widget/name/text
Run Code Online (Sandbox Code Playgroud)

这一项上没有任何输出。使用 xmllint 提取名称值的正确语法是什么?

注意:我已经有了grep 和 sed 的解决方案,但我想使用 xmllint。

xml bash xml-namespaces xmllint

3
推荐指数
1
解决办法
5615
查看次数

只执行一次 Chrome 扩展的脚本

我制作了一个修改特定登录页面的 Chrome 脚本。它按预期工作,但我可以在控制台中看到它始终处于活动状态,尽管它应该只应用于登录站点。

我的清单文件:

{
  "manifest_version": 2,
  "name": "Login Enhancer",
  "description": "Login without a hassle",
  "version": "1.0",
  "icons": {
    "16": "icon16.png",
    "48": "icon48.png",
    "128": "icon128.png"
  },
  "permissions": [
    "https://*.examplesite.io/subdomain/portal/#/login"
  ],
  "background": {
    "scripts": [
      "background.js"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

背景.js:

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

    chrome.tabs.executeScript(null, {file: 'script.js'});

  }
});
Run Code Online (Sandbox Code Playgroud)

脚本.js

// delete useless Remember Me Function
document.querySelector('.remember-me').remove();
Run Code Online (Sandbox Code Playgroud)

当我examplesite.io/subdomain在控制台上浏览时登录后,在每个新页面上都会说:

Uncaught TypeError: Cannot read property 'remove' of null
    at script.js:2
Run Code Online (Sandbox Code Playgroud)

显然没有更多的remember-me按钮可以删除。这可能与我的 …

javascript google-chrome-extension

2
推荐指数
1
解决办法
1919
查看次数

循环遍历bash脚本中的文件

我想用bash脚本编辑一堆文件.首先,我需要文件的单一路径以及计数器.到目前为止,我想出了这个:

let n=0
array=(`pwd`"/worker/worker*/conf/logfilefilter-worker*.xml")
for i in "${array[@]}"; do
  let "c += 1"
  echo $i
  echo $c
  # here comes the edit stuff.
done
Run Code Online (Sandbox Code Playgroud)

但是这个循环只运行一次:

[mles@sagnix etl-i_test]$ ./iprog_new --test
/home/devel/mles/etl-i_test/worker/worker01/conf/logfilefilter-worker01.xml     /home/devel/mles/etl-i_test/worker/worker02/conf/logfilefilter-worker02.xml /home/devel/mles/etl-i_test/worker/worker03/conf/logfilefilter-worker03.xml /home/devel/mles/etl-i_test/worker/worker04/conf/logfilefilter-worker04.xml /home/devel/mles/etl-i_test/worker/worker05/conf/logfilefilter-worker05.xml /home/devel/mles/etl-i_test/worker/worker06/conf/logfilefilter-worker06.xml /home/devel/mles/etl-i_test/worker/worker07/conf/logfilefilter-worker07.xml /home/devel/mles/etl-i_test/worker/worker08/conf/logfilefilter-worker08.xml
1
Run Code Online (Sandbox Code Playgroud)

循环如何通过文件一个接一个地运行?

bash loops

1
推荐指数
1
解决办法
618
查看次数

防止sed创建临时文件

我正在将代理变量注入到Shell脚本中。我必须对字符串进行转义,因为它们之间有空格。

sed -i -e 's#UseConcMarkSweepGC#UseConcMarkSweepGC $PROXY_ARGS#g' ${TEST_HOME}/bin/test.sh
Run Code Online (Sandbox Code Playgroud)

现在,这总是-e在末尾生成另一个文件ith ,因此我以test.shand 结尾test.sh-e。两者是相同的。目前我在做

rm test.sh-e
Run Code Online (Sandbox Code Playgroud)

之后 sed这工作正常。我想知道是否有一种方法根本不生成临时文件?我-e收到错误时无法删除sed: -i may not be used with stdin

macos bash shell sed

1
推荐指数
1
解决办法
1142
查看次数

从版本号中删除内部版本号:1.3.0.342 应变为 1.3.0

对于 Jenkins 构建脚本,我需要从版本中删除构建号。我需要结束MajorVersion.MinorVersion.BugfixVersion。这些数字不固定为一位数。如果它们已经具有三个版本号,则不会发生任何事情:

1.30.0.342 -> 1.30.0
100.3.0.32 -> 100.3.0
1.3.1234.3 -> 1.3.1234
1.3.0 -> 1.3.0
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 grep / sed 正确地做到这一点?

我的输入来自变量

export VERSION="$(gulp config --silent --getWidgetAttr=version)"
Run Code Online (Sandbox Code Playgroud)

bash grep sed

1
推荐指数
1
解决办法
273
查看次数

apache httpd.conf 中 favicon 的 RewriteRule

我正在尝试为我的 mediawiki 网站设置一个图标。该图标应该位于https://mywiki.net/favicon.ico

设置

  • Apache 基本路径是/var/www/html
  • 媒体维基位于/var/www/html/mywiki
  • 网站图标的路径是/var/www/html/mywiki/favicon.ico
  • 我将所有请求重定向mywiki.nethttps://mywiki.net/wiki
  • 我在 AWS EC2 机器上使用 Apache/2.4.25 (Amazon)

httpd.conf

阅读完短网址手册后,我将这些重定向放在我的 apache 配置的底部:

IncludeOptional conf.d/*.conf
RewriteEngine On
RewriteRule ^/favicon.ico /var/www/html/mywiki/favicon.ico [L]
Alias /wiki /var/www/html/mywiki/index.php
RedirectMatch ^/$ /wiki
Run Code Online (Sandbox Code Playgroud)

在conf.d 中,我包含了一个redirect-everyting-to-https 配置文件。这是由 LetsEncrypt 自动生成的:

conf.d/le-redirect-mywiki.net.conf

<VirtualHost _default_:80>
ServerName mywiki.net 

ServerSignature Off

RewriteEngine On
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

ErrorLog /var/log/httpd/redirect.error.log
LogLevel warn
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

到目前为止,维基百科可以正常运行,只是它没有图标。如果我wget https://mywiki.net/favicon.ico收到 404。在日志中我可以看到

==> /var/log/httpd/ssl_access_log <==
xxx.xxx.xxx.xxx - - [19/May/2017:20:43:37 +0000] "GET /favicon.ico …
Run Code Online (Sandbox Code Playgroud)

apache mod-rewrite redirect

1
推荐指数
1
解决办法
4078
查看次数

不能向(猫鼬)对象添加额外的元素

我有一个带有 api 的 nodejs express 应用程序,用于从 mongodb 数据库返回数据。这是我的猫鼬模型:

const bookingSchema = new mongoose.Schema({
  timestamp: {
    type: Date,
    default: Date.now,
    required: true
  },
  tags: {
    type: [String],
    required: true
  },
  amount: {
    type: Number,
    required: true
  },
  type: {
    type: String,
    required: true,
    enum: ['expense', 'income']
  }
})
Run Code Online (Sandbox Code Playgroud)

当我使用路径调用 api 时,/api/bookings/listbymonth/2019/1会调用后端内的此函数:

const bookingsListByMonth = (req, res) => {
  const year = ("0000" + req.params.year).slice(-4)
  const month = ("0000" + req.params.month).slice(-2)
  const dateOfMonth = `${year}${month}01`
  const start = moment(dateOfMonth).startOf("month")
  const …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose node.js array.prototype.map

1
推荐指数
1
解决办法
1532
查看次数

__defineGetter__函数始终返回false

我正在尝试为日期对象定义一个新的getter.但是它返回false.哪里是我的错误?

Date.prototype.__defineGetter__('ago', function(){
    var diff = ((( new Date()).getTime() - this.getTime()) / 1000)
    , day_diff = Math.floor(diff / 86400);
    return day_diff == 0 && (
    diff < 60 && "just now" ||
    diff < 120 && "1 minute ago" ||
    diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
    diff < 7200 && "1 hour ago" ||
    diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
    day_diff == 1 && …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

0
推荐指数
1
解决办法
473
查看次数

替换和删除shell脚本中的字符

我有一个shell脚本来自动化我的程序的构建.我需要改造的版本号码,如V4_5_1-RC14.5.1-RC1.该V应被删除和_应改为..我尝试了几件事,例如用sed:

$NAMEEXT = "V4_5_1-RC1"
$lffNameRSC = ${sed -e "s/V//g" <<< $NAMEEXT}
$lffNameRSC = ${sed -e "s/_/./g" <<< $lffNameRSC}
echo $lffNameRSC
Run Code Online (Sandbox Code Playgroud)

但我收到了错误.

./makerelease.sh: line 113: ${sed -e "s/V//g" <<< $NAMEEXT}: bad substitution
./makerelease.sh: line 114: ${sed -e "s/_/./g" <<< $lffNameRSC}: bad substitution
Run Code Online (Sandbox Code Playgroud)

bash sed

0
推荐指数
1
解决办法
1096
查看次数

timestamp = $(日期+%Y%m%d)未在shell脚本中计算

我有一个调用另一个shell脚本的shell脚本.其中一个参数是输出文件名,我想用时间戳作为前缀.到目前为止,我一直这样做:

#!/bin/bash -e

bash resign "$(date +%Y%m%d)_UI_Touch_SU_test_$version.ipa"
Run Code Online (Sandbox Code Playgroud)

这工作正常.生成的文件名是20151029_UI_Touch_SU_test_21.6.5212.ipa.但是我想进一步自定义文件名并有一个日期变量:

#!/bin/bash -e

timestamp=$(date +%Y%m%d)
bash resign "$timestamp_UI_Touch_SU_test_$version.ipa"
Run Code Online (Sandbox Code Playgroud)

这不起作用.生成的文件名是21.6.5212.ipa.如何正确设置日期变量?

bash shell

0
推荐指数
1
解决办法
315
查看次数