小编Pau*_*ce.的帖子

必须确定所有用户主目录 - 代字号脚本问题

假设someuser有一个主目录/ home/someuser

NAME = SomeUser的

在bash中 - 我用什么表达式组合使用tilde(〜)和$ NAME来返回用户主目录?

HOMEDIRECTORY=~someuser
echo $HOMEDIRECTORY
/home/someuser
NAME=someuser
echo ~$NAME
~someuser
Run Code Online (Sandbox Code Playgroud)

有什么建议?

bash tilde-expansion

5
推荐指数
3
解决办法
4586
查看次数

在bash脚本中检查C程序的返回值?

我有一个bash脚本,我使用$检查上次运行命令的退出代码?变量,但现在我正在执行一个C程序(从该脚本),如果程序成功执行,它返回0.有什么方法可以在我的bash脚本中捕获C程序的返回值吗?

我相信不同的命令,如awk,sed等都是用C语言编写的.他们如何使用$?将退出代码存储在其中?如何让我的C程序将其退出代码存储在$ ??

我希望我的问题很明确.

c linux bash

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

使用命令的输出作为下一个命令的输入

所以我从命令行调用这个PHP脚本:

/usr/bin/php /var/www/bims/index.php "projects/output"
Run Code Online (Sandbox Code Playgroud)

它的输出是:

file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

我想要做的是获取此输出并提供给"rm"命令但我认为我做得不对:

/usr/bin/php /var/www/bims/index.php "projects/output" | rm 
Run Code Online (Sandbox Code Playgroud)

我的目标是删除PHP脚本输出的任何文件名.应该怎样做才能做到这一点?

谢谢!

linux bash

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

在CQRS中进行非规范化的最佳实践是什么?

我正在尝试创建一个守护进程来对我的数据库进行非规范化。

我使用ActiveMQ作为队列管理器,我有2个数据库:关系数据库(写+复制)和非规范化数据库(用于读取)

我的问题是对我的真实数据库进行非规范化的最佳实践是什么,我有一些想法:

  • 读取队列的MySQL代理(带有lua)(可能)
  • 在MySQL中触发
  • Java守护程序作为读取队列的服务
  • Cron标签?(但我会有很多延迟时间

php mysql activemq-classic daemon cqrs

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

使用regex验证类/方法名称

我目前正在为一家公司开发一个MVC Style框架,出于安全考虑,我需要确保通过Query String传递的控制器/方法是RFC的有效字符(我找不到).

我需要能够根据PHP解释器允许的内容来验证/清理类名

例如:

class SomEFunk__YClAssName extends Controller
{

}
Run Code Online (Sandbox Code Playgroud)

我需要某种正则表达式来验证SomEFunk__YClAssName和消毒它,如果需要的话!这也是与方法相同的原则.

有一些事情需要考虑,比如

  • 数字在一开始
  • 只允许下划线
  • 某些PHP特殊字符是允许的.

关于这个或可能表达的任何信息都会非常有用.

这是我的一些路由器代码,因此您可以看到我需要实现它的位置:

private function prepareQueryString()
    {
        if(strlen($this->query_string) == 0)
        {
            return;
        }
        //Remove [ending|starting|multiple] slashes
        $this->query_string = preg_replace('/^\/+|\/+$|\/(?=\/)/', '', $this->query_string);
        foreach(explode('/',$this->query_string) as $Key => $Value)
        {
            if($Key == 0)
            {
                $Controller = $this->AssignController($Value);
            }
            if($Key == 1)
            {
                $this->AssignMethod($Value);
            }else
            {
                $this->AssignParam($Value);
            }
        }

        //Build RouterVar stdClass
    }

    public function AssignController(String $Controller)
    {
        if(!empty($Controller))
        {
            //Sanitize
        }
    }

    public function AssignMethod(String $Method) …
Run Code Online (Sandbox Code Playgroud)

php regex methods object

5
推荐指数
2
解决办法
5625
查看次数

awk:在END块中捕获`exit'

awk用于格式化输出文件中的输入文件.我有几种模式来填充变量(例如示例中的"某些模式").这些变量以END块中所需的格式打印.输出必须在那里完成,因为输入文件中的外观顺序不能保证,但输出文件中的顺序必须始终相同.

BEGIN {
    FS = "=|,"
}


/some pattern/ {
    if ($1 == 8) {
        var = $1
    } else {
        # Incorrect field value
        exit 1
    }
}

END {
    # Output the variables
    print var
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是exit模式中的陈述.如果存在某些错误并且调用了此命令,则根本不应该输出或者最多没有错误消息.但正如gawk手册(这里)所说,如果exit在模式块中调用该命令,则END至少会执行该块.有没有办法赶上exit这样的:

if (!exit_invoked) {
    print var
}
Run Code Online (Sandbox Code Playgroud)

或其他一些方法来避免在END块中打印输出?

斯特凡

编辑:使用shellter的解决方案.

awk

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

awk退出ACTION路径并直接进入END部分

我正在使用awk脚本,同样的骨架很简单

 awk '
 BEGIN {
     Variable declaration
 }
 {
    ACTION PART
 }
 END
 {
 }' FILE A
Run Code Online (Sandbox Code Playgroud)

文件A是如此庞大的文件.所以我不想遍历整个文件,所以我想要做的是,我试图在ACTION PART中保留一些检查,如果检查成功,那么我需要跳过阅读其余部分该文件并直接转到END部分.

我的问题是如何根据条件将脚本从ACTION PART重定向到END Part ..我正在寻找某种类似命令,如for循环中的"break".你能和人分享你的想法吗?谢谢.

shell awk

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

\b、\f、\n、\r 有什么作用?有什么区别?

我想知道一些转义序列做了什么,包括以下内容:

\b backspace
\f form feed
\n new line
\r carriage return
\t tab
Run Code Online (Sandbox Code Playgroud)

另外,换页、换行和回车有什么区别?\t 和空格有什么区别?他们都长得一样……

escaping

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

为什么md5不匹配Perl的Digest :: MD5输出?

从ksh终端运行md5函数与简单的Perl脚本的输出不匹配.

在终端我运行:

echo -n abc | md5
62fecf21103616856d72e6ffc9bcb06b
Run Code Online (Sandbox Code Playgroud)

如果我使用Perl运行它:

use Digest::MD5 qw(md5_hex);

foreach (@ARGV) {
   print "Digest is ", md5_hex($_), "\n";
}
exit
Run Code Online (Sandbox Code Playgroud)

我明白了

./perl_test.sh abc
Digest is 900150983cd24fb0d6963f7d28e17f72
Run Code Online (Sandbox Code Playgroud)

在我看到的所有示例和md5函数本身的示例中,Perl看起来正确,但仅使用Ksh 的示例不是:

md5 -x
MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
Run Code Online (Sandbox Code Playgroud)

perl ksh md5

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

计算词典列表中的条目:for loop with list comprehension with map(itemgetter)

在我编写的Python程序中,我使用for循环和增量变量与列表理解进行比较,map(itemgetter)len()计算列表中字典中的条目.使用每种方法需要相同的时间.我做错了什么还是有更好的方法?

这是一个大大简化和缩短的数据结构:

list = [
  {'key1': True, 'dontcare': False, 'ignoreme': False, 'key2': True, 'filenotfound': 'biscuits and gravy'},
  {'key1': False, 'dontcare': False, 'ignoreme': False, 'key2': True, 'filenotfound': 'peaches and cream'},
  {'key1': True, 'dontcare': False, 'ignoreme': False, 'key2': False, 'filenotfound': 'Abbott and Costello'},
  {'key1': False, 'dontcare': False, 'ignoreme': True, 'key2': False, 'filenotfound': 'over and under'},
  {'key1': True, 'dontcare': True, 'ignoreme': False, 'key2': True, 'filenotfound': 'Scotch and... well... neat, thanks'}
]
Run Code Online (Sandbox Code Playgroud)

这是for循环版本:

#!/usr/bin/env python
# …
Run Code Online (Sandbox Code Playgroud)

python dictionary loops list-comprehension map

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