小编use*_*471的帖子

测试操作员-a和-o短路?

test运营商-a-o短路?

我试过if [ 0 -eq 1 -a "" -eq 0 ]; then ...抱怨第二个条件的语法.但我不知道这是不是因为

  1. -a 不会短路
  2. 或者test希望在开始之前对所有格式进行适当格式化并且仍然短路.

结果导致我创建一个嵌套,if当我真正想要的是第一个条件将防止执行第二个如果尚未设置特定var的情况...

编辑:至于为什么我使用过时的操作符,代码必须在我的环境中的任何地方工作,我刚刚找到一台机器

while [ -L "$file" ] && [ "$n" -lt 10 ] && [ "$m" -eq 0 ]; do

是一个无限循环,并改为过时-a产生良好的行为:

while [ -L "$file" -a "$n" -lt 10 -a "$m" -eq 0 ]; do

我该怎么办?第一个表达式适用于许多机器但不是这台机器似乎需要第二个表达式而不是......

shell posix sh

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

在shell中为实用程序构建参数的便携方式?

我正在编写一个shell脚本,可以在各种机器上运行.其中一些机器有bash 2或bash 3.有些运行BusyBox 1.18.4 bin/bash但存在

  • /bin/bash --version 根本不回报任何东西
  • foo=( "hello" "world" )抱怨意外附近的语法错误,"("无论是否在parens内部都有额外的空格...所以数组似乎有限或缺失

还有更现代或更全功能的Linux和bash版本.

bash脚本在运行时为调用某些实用程序构建参数的最便携方式是什么find?我可以建立一个字符串,但觉得数组是一个更好的选择.除了上面的第二个要点......

假设我的脚本是foo,你就这样称呼它:foo -o 1 .jpg .png

这是一些伪代码

#!/bin/bash

# handle option -o here
shift $(expr $OPTIND - 1)

# build up parameters for find here
parameters=(my-diretory -type f -maxdepth 2)
if [ -n "$1" ]; then
    parameters+=-iname '*$1' -print
    shift
fi

while [ $# -gt 0 ]; do
    parameters+=-o -iname '*$1' -print
    shift
done

find <new positional parameters …
Run Code Online (Sandbox Code Playgroud)

shell busybox

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

POSIX glob -- 如何匹配一个或多个 [:digit:]

我想迭代foo.log它的日志轮换兄弟姐妹foo.1.gzfoo.2.gz从最新到最旧,代码不会被存在所迷惑foo.bar

令人高兴的是,logrotate命名事物时,从最新到最旧的顺序和字母顺序都是相同的。

我最初的尝试是for f in $(ls -t foo.*); do ...但是shellcheckIterating over ls output is fragile. Use globs. [SC2045]。另外,此代码匹配foo.bar不需要的内容。

但是如何将任意数量的数字与全局模式匹配呢?(或者这是不支持的?)我只知道如何明确列出每个数字。例如,以下处理 1 和 2 位数字并正确排除foo.1bar.gz但不处理foo.123.gz(并且我没有做正确的事情来导致globing 发生!)

for f in foo.log foo.[[:digit:]].gz foo.[[:digit:]][[:digit:]].gz; do ...

我可以假设没有人保留超过 100 个日志轮换的兄弟姐妹,但我不想这样做。

正在寻找符合 POSIX 标准的解决方案...

编辑:logrotate conf 会压缩某些文件,但不会压缩其他文件。所以并不是所有的兄弟姐妹都会以.gz.

linux posix glob sh

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

Mac OS X 安全性删除证书 -c &lt;名称&gt; 的示例?

简短版本:请提供...的示例security delete-certificate -c <name>(我尝试过security delete-certificate -c "Foo Certification Authority",也尝试过通配符。)

长版:

我想要做的是:替换或覆盖现有证书。

有人可以提供一个security用于获取证书的“名称”然后security delete-certificate -c <name>用于删除它的示例吗?我已经尝试了一些东西,<name>但还没有能够提供与我想要删除的证书相匹配的东西。

或者,如果我使用security add-trusted-cert -d -r trustRoot -k <keychain> <certificate>它是否会简单地覆盖任何现有的同名证书?如果是这种情况,那么我想我不需要知道如何按名称删除旧的。

(我更喜欢处理名称而不是 SHA,因为它使事情更具人类可读性)

security macos certificate

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

如何在 xmonad 中“排列”我的显示?

我有两个物理显示器。目前 xmonad 认为它们之间有一定的物理距离,因此当我将光标从一个显示器移动到下一个显示器时,鼠标会从一个显示器的边缘消失,并且我必须在鼠标出现在下一个显示器上之前继续移动鼠标一段距离。

另一个表明它们配置错误的迹象是,当屏幕保护程序在两个屏幕上显示动画时,中间有很大一部分缺失(并不是说我实际上关心屏幕保护程序的外观)

在 gnome 中,有一个显示设置面板,您可以在其中拖动一个显示器相对于另一个显示器的位置,以匹配您的物理现实(例如一个显示器比另一个显示器稍高)

xmonad 中的等价物是什么?

如果有帮助,这是 xrandr 的输出

Screen 0: minimum 320 x 200, current 3840 x 1920, maximum 16384 x 16384
DisplayPort-0 connected 1200x1920+1920+0 left (normal left inverted right x axis y axis) 518mm x 324mm
1920x1200     59.95*+
1920x1080     59.99  
1600x1200     60.00  
1680x1050     59.95  
1280x1024     60.02  
1280x960      60.00  
1024x768      60.00  
800x600       60.32  
640x480       60.00  
720x400       70.08  
DVI-0 connected primary 1200x1920+0+0 left (normal left inverted right x axis y axis) 518mm x 324mm
1920x1200     59.95*+
1920x1080 …
Run Code Online (Sandbox Code Playgroud)

x11

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

如何在没有readlink或realpath的情况下递归解析符号链接?

什么是最好的便携式(POSIX?)方法来脚本找到链接的目标,如果readlinkrealpath不可用?

你会ls -l,如果它开始时带有l文本->,sed并重复,直到它不再开始l

shell posix sh

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

如何在javascript中使用clojurescript中的复杂返回对象

我想编写一个clojurescript函数,它返回一个复杂的项目,如["foo""bar"]或(list"foo""bar"),我希望能够从javascript调用此函数并获取部分的回报价值.怎么做到呢?在我的情况下,我正在返回的vector/list/collection中的项目数量是预先知道的,并且该集合应保持有序.

这是我的clojurescript功能.如果它让事情变得更容易,我可以在这里做些不同的事 只是不知道那会是什么.

(defn myFn [] ["foo" "bar"])
Run Code Online (Sandbox Code Playgroud)

这是它编译成javascript后的样子.该部分完全由前一位代码确定/生成.要在这里进行更改,我必须知道如何调整clojurescript中的上一部分.

my.ns.myFn = function myFn() {
  return cljs.core.PersistentVector.fromArray(["foo", "bar"], true)
};
Run Code Online (Sandbox Code Playgroud)

当我在javascript中执行以下操作时,我会看到弹出一个警告框[[foo""bar"]

alert(my.ns.myFn());
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试以下操作,警报会显示"未定义"而不是"foo".

var tmp = my.ns.myFn();
alert(tmp[0]);
Run Code Online (Sandbox Code Playgroud)

我应该采取哪些不同的方式来获取显示"foo"的警报?(嗯.我想我可以编写更多的clojurescript来使用该值,看看在编译为javascript时它是如何出现的......)

javascript interop clojurescript

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

Appium + Android + WebDriver findElement():sendKeys()之后找不到元素?

我有一个模拟Android设备和Appium.我的测试成功启动了正确的Activity并在特定的文本字段中输入.但是当我尝试找到相同的文本字段以便检查其中的文本时,我得到"An element could not be located on the page using the given search parameters."即使我尝试重新使用该元素而不是第二次搜索它,它仍然会失败并显示相同的消息.我该怎么办?也许第二个的上下文findElement()是错误的 - 我也找不到文本字段旁边的按钮.

这是一个包含应用程序和测试项目的git仓库.失败的JUnit测试证明了这个问题:https://github.com/achengs/an-appium-question

下面的详细信息(代码和Appium日志交错)

这是第一个成功的findElement.Activity的布局xml文件具有我正在寻找的文本字段的此属性:android:id="@+id/edit_message"

public static final String MESSAGE_TO_SEND = "edit_message";
...
WebElement e = driver.findElement(By.id(MESSAGE_TO_SEND));
Run Code Online (Sandbox Code Playgroud)

第一个findElement成功:

debug: Appium request initiated at /wd/hub/session/0ec259be-87e0-47f6-9279-da577fe29a07/element
debug: Request received with params: {"using":"id","value":"edit_message"}
info: Pushing command to appium work queue: ["find",{"strategy":"id","selector":"edit_message","context":"","multiple":false}]
info: [BOOTSTRAP] [info] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"id","selector":"edit_message","context":"","multiple":false}}
info: [BOOTSTRAP] [info] Got command of type ACTION
info: [BOOTSTRAP] [debug] Got …
Run Code Online (Sandbox Code Playgroud)

selenium android appium

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

使用sed删除包含斜杠的行/

我知道在某些情况下,除了/可以在sed表达式中使用的其他字符:

sed -e 's.//..g' file因为我们用作分隔符//,file所以替换为空字符串..

但是,如果要删除匹配的行,//commentfile怎么办?

sed -e './/comment.d' file 回报

sed: -e expression #1, char 1: unknown command: `.'
Run Code Online (Sandbox Code Playgroud)

bash sed

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

如何在纵向模式/方向使用xmonad?

如何在纵向方向上使用xmonad和物理屏幕?

我有两个物理显示器,它们都向右旋转90度(顺时针方向,左边有原始底边)

我在Fedora 21上(3.19.3-200.fc21.x86_64)

我不知道如何判断哪个窗口管理器正在运行,但是有一个gnome-shell进程正在运行...

当我sudo telinit 3和我的时候startx,xmonad提出横向的一切.我不知道如何改变它,我不知道如何让它以纵向模式启动.

我的.xinitrc文件说明了这一点

#!/usr/bin/env bash
emacs &
gnome-terminal &
exec xmonad
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

x11

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