小编oli*_*bre的帖子

在make中取消设置变量时获取默认值

(编辑:基于@Michael反馈的问题更准确)

在bash中,我经常使用参数扩展:以下命令default value$VARNAME未设置时打印" " ,否则打印VARNAME内容.

echo ${VARNAME:-default value}  #if VARNAME empty => print "default value" 
echo ${VARNAME-default value}   #if VARNAME empty => print "" (VARNAME string)
Run Code Online (Sandbox Code Playgroud)

没有在GNU上找到类似的功能make.我终于在我写的Makefile:

VARNAME ?= "default value"
all:
        echo ${VARNAME}
Run Code Online (Sandbox Code Playgroud)

但我对这个解决方案不满意:它总是创建变量VARNAME,这可能会改变某些makefile上的行为.

有没有更简单的方法来获取未设置变量的默认值?

bash gnu-make variable-expansion

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

为什么constexpr静态成员(类型类)需要定义?

==>查看coliru上的完整代码段和编译.

我有一个LiteralType类填充constexpr要求:

struct MyString
{
    constexpr MyString(char const* p, int s) : ptr(p), sz(s) {}
    constexpr char const* data() const { return ptr; }
    constexpr int         size() const { return sz;  }

    char const *ptr = 0;
    int  const  sz  = 0;
};
Run Code Online (Sandbox Code Playgroud)

我用它作为constexpr static成员变量:

struct Foo
{
    int size() { return str_.size(); }

    constexpr static MyString str_{"ABC",3};
};

int main()
{
  Foo foo;
  return ! foo.size();
}
Run Code Online (Sandbox Code Playgroud)

但链接器说:(
Clang-3.5和GCC-4.9)

undefined …
Run Code Online (Sandbox Code Playgroud)

c++ static-members constexpr c++11 c++14

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

Ansible可以部署公共SSH密钥只需要一次密码吗?

我想知道如何使用Ansible将我的SSH公钥复制到许多主机.

第一次尝试:

ansible all -i inventory -m local_action -a "ssh-copy-id {{ inventory_hostname }}" --ask-pass
Run Code Online (Sandbox Code Playgroud)

但我有错误The module local_action was not found in configured module paths.

第二次尝试使用剧本:

- hosts: all
  become: no
  tasks:
  - local_action: command ssh-copy-id {{ inventory_hostname }}
Run Code Online (Sandbox Code Playgroud)

最后,我为每个托管主机输入了密码:

ansible all -i inventory --list-hosts | while read h ; do ssh-copy-id "$h" ; done
Run Code Online (Sandbox Code Playgroud)

在将公共SSH密钥部署到多台主机时,如何只填写一次密码?



编辑:   我已成功使用Konstantin Suvorov的答案中的以下剧本将我的SSH公钥复制到多个远程主机.

- hosts: all
  tasks:
  - authorized_key:
      key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
Run Code Online (Sandbox Code Playgroud)

user根据文档,该字段应该是强制性的,但似乎没有.因此,当与此命令行一起使用时,上述通用playbook可用于任何用户:

ansible-playbook -i …
Run Code Online (Sandbox Code Playgroud)

ssh-keys ansible ansible-2.x

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

在一个Elasticsearch HTTP请求(cURL)中删除多个索引

我正在使用此curl命令行来清理我的索引:

curl -XDELETE http://example.com/my_index-*
Run Code Online (Sandbox Code Playgroud)

但是,现在,我想删除my_index-.*[.][0-3][0-9]:

  • 仅删除 my_index-YYYY.MM.dd
  • 保持 my_index-YYYY.MM.dd-*

我发现的相关Elasticsearch文档:

  • 删除索引API在正则表达式上没有说什么.

  • 多个指数说:

    它也支持通配符,例如:test**testte*t*test*,并以"增加"(能力+)和"删除"( -),例如:+test*,-test3.

  • 索引名称中的日期数学支持说:

    几乎所有具有index参数的API都支持index参数值中的日期数学.
    [...]
    date_format是可选格式,应在其中呈现计算日期.默认为YYYY.MM.dd.


我的问题:

  • 是否可以向DELETEElasticsearch HTTP服务器发送请求方法以删除仅格式化的索引my_index-YYYY.MM.dd
  • 或反过来,删除所有my_index-*但保持my_index-*-*

例如,有时可以在POST数据中提供正则表达式:

curl -XPOST http://example.com/my_index-2017.07.14/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "suggest": {
        "song-suggest" : {
            "regex" : "n[ever|i]r",
            "completion" : {
                "field" …
Run Code Online (Sandbox Code Playgroud)

curl elasticsearch elasticsearch-indices elasticsearch-5

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

CMake虚拟目标取决于其他目标

我有一个3 方项目提供了许多库(假设只有头的库).我想为这个项目编写一个CMake封装:

文件 foo.cmake

add_library(          foo-aaa INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-aaa PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/aaa/inc)

add_library(          foo-bbb INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-bbb PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/bbb/inc)

add_library(          foo-ccc INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-ccc PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/ccc/inc)

add_library(          foo-ddd INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-ddd PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/ddd/inc)

add_library(          foo-eee INTERFACE IMPORTED GLOBAL)
set_target_properties(foo-eee PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/eee/inc)

[...] And many more

# For convenience I also want to provide 
# a global/dummy target depending on all above libraries
add_library( foo ????? )
Run Code Online (Sandbox Code Playgroud)

主要 CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
project(bar …
Run Code Online (Sandbox Code Playgroud)

dependencies cmake target

9
推荐指数
2
解决办法
2724
查看次数

Python静态方法并不总是可调用的

在使用解析属性时__dict__,我@staticmethod不是callable.

Python 2.7.5 (default, Aug 29 2016, 10:12:21)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import (absolute_import, division, print_function)
>>> class C(object):
...   @staticmethod
...   def foo():
...     for name, val in C.__dict__.items():
...       if name[:2] != '__':
...          print(name, callable(val), type(val))
...
>>> C.foo()
foo  False  <type 'staticmethod'>
Run Code Online (Sandbox Code Playgroud)
  • 这怎么可能?
  • 如何检查静态方法是否可调用?

我在下面提供了一个更详细的例子:

脚本 test.py

from __future__ import (absolute_import, division, print_function)

class …
Run Code Online (Sandbox Code Playgroud)

python static-methods callable python-2.7 python-3.x

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

isSet()或operator void*()或显式opertor bool()还是其他什么?

什么是最先进的大约功能检查值是否设置与否

例如,下面的迭代器解析单元格.一些单元格包含值,其他单元格为空.

什么是最方便的方式?

struct iterator 
{                                  //usage:
  bool isset() const               // if (it.isset()) 
  bool isSet() const               // if (it.isSet()) 
  bool empty() const               // if (it.empty()) 

  bool is_set()   const            // if (it.is_set()) 
  bool is_valid() const            // if (it.is_valid()) 

  operator void*() const;          // if (it) 

  explicit operator bool() const;  // if ((bool)it) or if(it) //thanks @stijn
  operator          bool() const;  // if (it) //why not implicit conversion?

  bool operator!() const;          // if (!!it)

  //throwing exception as pointed out by …
Run Code Online (Sandbox Code Playgroud)

c++ operator-keyword explicit-conversion c++11 c++03

8
推荐指数
2
解决办法
2599
查看次数

ulimit Hard(-H)和Soft(-S)的含义

什么是/限制是什么意思?

核心文件大小的差异例如:
ulimit -Sc 1024对比ulimit -Hc 1024

我经常ulimit -c unlimited在运行二进制文件之前输入我的脚本.
但是,我想限制文件大小以避免磁盘已满.
然后我想知道最好的方法:

ulimit -Sc 1024  # Soft
ulimit -Hc 1024  # Hard
ulimit  -c 1024  # Both
Run Code Online (Sandbox Code Playgroud)

另一个建议:价值怎么样?
ulimit -c 1024或者ulimit -c 10240还是其他什么东西?

bash shell coredump built-in ulimit

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

检查整数内是否只设置了一个位(无论其位置如何)

我使用64位整数内的位存储标志.
我想知道是否有一个位设置无论64位整数内的位置(ei我不关心任何特定位的位置).

boolean isOneSingleBitSet (long integer64)
{
   return ....;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用Bit Twiddling Hacks(Sean Eron Anderson)计算位数,但我想知道检测单个位是否设置的最有效方法是什么...

我发现了一些其他相关的问题:

以及一些维基百科页面:

注意:我的应用程序是在java中,但我很好奇使用其他语言的优化...


编辑:琉永福指出我的问题在我的第一个链接已经得到了答案:请参见如果一个整数是2的幂确定位操作黑客(肖恩·安德森玉龙).我没有意识到单个位与2的幂相同.

java binary bit-manipulation bit bitwise-operators

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

如何实现boost :: variant派生类?

我已经尝试了几个小时来编写一个派生自的类boost::variant.但我不明白是什么问题(我不明白编译错误意味着什么).

实现干净boost::variant派生类的规则是什么?

#include <boost/variant.hpp>

class MyVariant : public boost::variant<char,bool>
{
public:    
       MyVariant ()          : boost::variant<char,bool>( ) {}

       template <typename T>
       MyVariant(      T& v) : boost::variant<char,bool>(v) {}

       template <typename T>
       MyVariant(const T& v) : boost::variant<char,bool>(v) {}
};

int main ()
{
      MyVariant a;
      MyVariant b = a;        //compilation error
  //  MyVariant c = MyVariant();
  //  MyVariant d (true);
  //  MyVariant e ('E');
}
Run Code Online (Sandbox Code Playgroud)

为什么我要使用继承?(编辑给@zaufi更多细节)

  • 我想要一个空状态
  • 我想接受const char*string
  • 我想接受intlong
  • 我想给出enum …

c++ gcc boost derived-class boost-variant

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