这应该将整个关联数组打印到控制台:
#!/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) - 发布.
我正在使用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) 我需要从此 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。
我制作了一个修改特定登录页面的 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按钮可以删除。这可能与我的 …
我想用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)
循环如何通过文件一个接一个地运行?
我正在将代理变量注入到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。
对于 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) 我正在尝试为我的 mediawiki 网站设置一个图标。该图标应该位于https://mywiki.net/favicon.ico
设置
/var/www/html/var/www/html/mywiki/var/www/html/mywiki/favicon.icomywiki.net至https://mywiki.net/wikihttpd.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) 我有一个带有 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) 我正在尝试为日期对象定义一个新的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) 我有一个shell脚本来自动化我的程序的构建.我需要改造的版本号码,如V4_5_1-RC1到4.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) 我有一个调用另一个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.如何正确设置日期变量?