小编Jah*_*hid的帖子

如何检查我的Bash脚本中是否存在关联数组元素?

我有一系列动物:

declare -A animals=()
animals+=([horse])
Run Code Online (Sandbox Code Playgroud)

我想检查动物是否存在:

if [ -z "$animals[horse]"]; then
    echo "horse exists";
fi
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

bash

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

chroot + execvp + bash

更新

得到它了!看我的解决方案(第五条评论)

这是我的问题:

我创建了一个名为"jail"的小二进制文件,在/ etc/password中我将它作为测试用户的默认shell.

这是 - 简化 - 源代码:

#define HOME "/home/user"
#define SHELL "/bin/bash"
...
if(chdir(HOME) || chroot(HOME)) return -1;
...
char *shellargv[] = { SHELL, "-login", "-rcfile", "/bin/myscript", 0 };
execvp(SHELL, shellargv);
Run Code Online (Sandbox Code Playgroud)

好吧,无论我怎么努力,似乎当我的测试用户登录时,/ bin/myscript将永远不会被采购.同样,如果我将.bashrc文件放在用户的主目录中,它也会被忽略.

为什么要抨击这些家伙呢?

-

一些精确,但不一定相关,但要澄清评论中提出的一些观点:

  • 'jail'二进制文件实际上是suid,因此允许它成功地chroot().
  • 我用'ln'来制作合适的二进制文件 - 我的jail单元很好地填充:)
  • 这个问题似乎与chrooting用户没有关系...其他东西是疏忽.

bash chroot

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

如何在bash中提示是或否?

如何在Bash中询问是/否类型问题?

我问这个问题...... echo "Do you like pie?"

并得到答案...... read pie

如果答案是yes或开始,我该怎么办?y(是的,是的,等等,也会起作用).

unix bash shell command-line sh

7
推荐指数
4
解决办法
6529
查看次数

滚动div中的绝对底部位置?

小提琴

我希望将我的按钮对齐到容器的底座,所以我使用:

.buttons{
    position: absolute;
    bottom: 0;
}
Run Code Online (Sandbox Code Playgroud)

当没有太多内容(小提琴中的粉色div)时,这很好,但是当有很多内容(小提琴中的橙色div)时,容器会滚动并且按钮不在容器的底部.

如果按钮位于容器的底部,当它没有大量内容时,如果内容很多,它们位于滚动的底部(内容下方),我怎么能拥有它呢?

html css css3

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

当mouseDown按下js时如何实现mousemove

我必须在按下鼠标时才实现鼠标移动事件.

我只需要在鼠标移动和鼠标移动时执行"OK Moved".

我用过这段代码

 $(".floor").mousedown(function() {
  $(".floor").bind('mouseover',function(){
      alert("OK Moved!");
  });
})
.mouseup(function() {
 $(".floor").unbind('mouseover');
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery mouseevent mousemove mousedown

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

在c ++项目中使用pcre2

我正在寻找在我的简单c ++应用程序中使用pcre2,(我正在使用vs2015).(我正在看各种正则表达式库,一般的感觉是pcre/pcre2是最灵活的)

首先我从官方位置下载了pcre2,(http://sourceforge.net/projects/pcre/files/pcre2/10.20/)并创建了一个非常简单的例子.

#define PCRE2_CODE_UNIT_WIDTH 8
#include <pcre2.h>
...
PCRE2_SPTR subject = (PCRE2_SPTR)std::string("this is it").c_str();
PCRE2_SPTR pattern = (PCRE2_SPTR)std::string("([a-z]+)|\\s").c_str();

...
int errorcode;
PCRE2_SIZE erroroffset;
pcre2_code *re = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 
                                PCRE2_ANCHORED | PCRE2_UTF, &errorcode,  
                                &erroroffset, NULL);
...
Run Code Online (Sandbox Code Playgroud)

首先文件" pcre2.h "不存在,所以我将pcre2.h.generic命名pcre2.h

但后来我得到了未解析的外部链接器错误.

我猜我需要从源到项目包含一个或多个文件.但我不愿意随意添加文件而不知道它们的作用.

有人可以给出一些简单的步骤来使用pcre2成功构建项目吗?

更新
这不是一个导入库问题,pcre2.h没有librar(我不能在他们的发布位置看到).

c++ pcre visual-c++ c++11

7
推荐指数
2
解决办法
3227
查看次数

UITextView setText不更新文本

在我的笔尖中,我有一个UITextView组件.

在我的代码中我有一个UITextView字段,我使用Interface Builder来确保两者是连接的(至少我认为我是通过从"文件所有者"拖动并将其放在UITextViewInterface Builder中并选择我的成员变量来实现的) .

现在,当我更新文本时setText,UITextView仍然是空白的.

谢谢DeShawn

interface-builder uitextview ios4 ios

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

用于将文件夹名称复制并添加到多个子目录中的文件的Shell脚本

我有几个文件夹,不同的图像共享文件名,文件夹结构如下:

/parent/folder001/img001.jpg
/parent/folder001/img002.jpg
/parent/folder002/img001.jpg
/parent/folder002/img002.jpg
/parent/folder003/img001.jpg
/parent/folder003/img002.jpg
...
Run Code Online (Sandbox Code Playgroud)

并希望将这些文件复制/重命名为新文件夹,如下所示:

/newfolder/folder001_img001.jpg
/newfolder/folder001_img002.jpg
/newfolder/folder002_img001.jpg
/newfolder/folder002_img002.jpg
/newfolder/folder003_img001.jpg
/newfolder/folder003_img002.jpg
...
Run Code Online (Sandbox Code Playgroud)

(如果newfolder不是父文件夹的子文件夹,那可能会更好,因为这可能最终导致非常奇怪的递归.)

包含图像的文件夹都不包含任何子文件夹.

理想情况下,我希望能够重用该脚本来"更新"新文件夹,因为我可能需要在以后添加更多包含文件夹的图像.

如何使用shell脚本完成此操作?

unix linux shell rename batch-rename

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

语法错误:bash脚本中出现"fi"意外(期望"然后")

我尝试做脚本:

#!/bin/bash
IP='192.168.1.1'
fping -c1 -t300 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
    echo "Host found"
else
    echo "Host not found"
fi
Run Code Online (Sandbox Code Playgroud)

我把它转过来:

pi@raspberrypi ~ $ sh /home/pi/sh/test.sh

/home/pi/sh/test.sh: 9: /home/pi/sh/test.sh: Syntax error: "fi" unexpected (expecting "then")
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?

bash scripting command-line sh

6
推荐指数
2
解决办法
9182
查看次数

按Ctrl + C终止"grunt watch",但杀死从同一个bash开始的Atom编辑器,为什么?

我有这个脚本命名wsjs.sh:

#!/bin/bash
WS=/home/user/wsjs
cd $WS
nohup atom . & 
gnome-terminal
grunt watch
Run Code Online (Sandbox Code Playgroud)

如果我在bash中运行它:

./wsjs.sh
Run Code Online (Sandbox Code Playgroud)

然后原子编辑器,gnome-terminal分别启动,当前的bash显示:

user@ubuntu:~$ ./wsjs.pwd 
nohup: appending output to ‘nohup.out’
Running "watch" task
Waiting...
Run Code Online (Sandbox Code Playgroud)

现在,如果我按ctrl + c,grunt watch退出,BUT原子编辑器也关闭.

......这很奇怪.

我在bash中手动输入了每个命令,并且原子未关闭.我用gedit替换了atom并运行脚本,它没有关闭.

为什么原子关闭了?谢谢!

linux bash shell atom-editor

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