小编Rev*_*ing的帖子

bash脚本中#!/ bin/false的用途

在我的前同事处理用bash编写的项目时,我注意到所有.sh文件都只包含函数定义#!/bin/false,据我所知,这是一种防止执行仅包含文件的安全机制.

例:

my_foo.sh

#!/bin/false
function foo(){
    echo foontastic
}
Run Code Online (Sandbox Code Playgroud)

my_script.sh

#!/bin/bash

./my_foo.sh # does nothing
foo # error, no command named "foo"

. ./my_foo.sh 
foo # prints "foontastic"
Run Code Online (Sandbox Code Playgroud)

但是,当我不使用时#!/bin/false,正确和不正确使用的效果完全相同:

例:

my_bar.sh

function bar(){
   echo barvelous
}
Run Code Online (Sandbox Code Playgroud)

my_script.sh

 #!/bin/bash

./my_bar.sh # spawn a subshell, defines bar and exit, effectively doing nothing
bar # error, no command named "bar"

. ./my_bar.sh
bar # prints "barvelous"
Run Code Online (Sandbox Code Playgroud)

由于source在两种情况下正确使用这些脚本都可以按预期工作,并且在两种情况下执行它们都不会从父shell的角度执行任何操作并且不会生成有关无效使用的错误消息#!/bash/false,这些脚本的目的究竟是什么?

bash shell

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

模板参数演绎困惑

我创建了以下结构:

template<class T>
struct not_equals
{
  not_equals(T d):data(d){};
  bool operator()(T const & in)
  {
    return data != in;
  }
  T data;
};
Run Code Online (Sandbox Code Playgroud)

我的期望是,因为我需要将一些具体类型的值传递d 给构造函数,所以模板参数T将从类型中推导出来d.

但是,这不会发生.

not_equals('0'); // fails with 'missing template arguments'
char zero = '0';
not_equals(zero); // same as above
not_equals<char>('0'); // compiles without errors
Run Code Online (Sandbox Code Playgroud)

编译器无法识别模板参数类型的原因是什么?

c++ templates c++03 argument-deduction

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

严重模板库中的代码混淆

我们的商业C++库的很大一部分依赖于模板.我们计划将我们的产品作为头文件和动态链接库(闭源)出售,但由于我们的大多数代码库都集中在头文件中,我们事实上将它作为开源发布,缺少小的,易于更换的块.

以下是库接口中我们的一个类的示例:

template<class ItInput, class ItOutput>
struct serialize{
  ItOutput operator() (ItInput first, ItInput last, ItOutput d_first) {
    // operation on pointers (assuming that ++, -- and * operators work as expected for pointers) 
} 
Run Code Online (Sandbox Code Playgroud)

有没有办法为我们的模板化代码提供等于或优于常规代码编译的混淆程度(即技术上可逆,但不盈利,也不是最佳)?

编辑:澄清一下,我们的目标是阻止用户阅读实施,而不是阻止非法复制我们的工作.为了解决这个问题,请假设我们有正当理由要求这一要求.

c++ obfuscation templates commercial-application

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