小编axo*_*xon的帖子

如何传递包含引号/空格的脚本参数?

我正在尝试编写一个notify-finish可以添加到任何命令之前的脚本.完成后,它将运行以下参数给出的命令,然后在命令完成时通过电子邮件发送给用户.这就是我所拥有的:

PROG=$1
# Run command given by arguments
$@
ECODE=$?
echo -e "Subject: `hostname`: $PROG finished\r\nTo: <$USER>\r\n\r\nExited with $ECODE\r\n" | sendmail $USER
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都有效,但是当参数包含空格时,引用会被删除.

工作范例:

notify-finished rsync -avz source/ user@remote:dest/
Run Code Online (Sandbox Code Playgroud)

失败的例子:

notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,$@扩展到rsync -avz -e ssh -c blowfish source user@remote:dest/,缺少单引号.它也不适用于双引号,也不适用于$*.

在阅读其他帖子之后,我尝试将命令放在一个数组中,但是我得到了完全相同的问题:

CMD=(notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/)
${CMD[@]}
Run Code Online (Sandbox Code Playgroud)

我如何使这项工作适用于所有论点?

bash quoting

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

使用原始数据包数据和inet_ntoa()进行转换

试图为数据包嗅探器编写处理程序.我遇到了铸造问题inet_ntoa().代码如下:

uint32_t *iphdr_srcaddr = malloc(sizeof(uint32_t));
if (*packet_ethertype == ETHERTYPE_IP) { /* IPv4 */
    // copy packet data to vars
    memcpy(iphdr_srcaddr, packet+26, 4);

    // change to host-byte-order
    *iphdr_srcaddr = ntohl(*iphdr_srcaddr);

    struct in_addr *test;
    test = (struct in_addr*) iphdr_srcaddr;

    printf("uint32_t: %u\n", *iphdr_srcaddr); // Gives the correct long integer for the address
    printf("struct in_addr: %u\n", test->s_addr); // Gives the correct long integer through the cast

    char *test2;
    test2 = inet_ntoa(*test);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我试图printf("%s\n", test)获得SEGV.我确定我正在混淆指针,价值观和做某种愚蠢的演员.运行期间收到错误:

Program received signal SIGSEGV, Segmentation fault. …
Run Code Online (Sandbox Code Playgroud)

c pointers casting pcap

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

列表理解期间的Python字典分配

我有一个权限字典,如下:

{'READ': True,  'WRITE': None, 'DELETE': False}
Run Code Online (Sandbox Code Playgroud)

实际字典有更多的键,但这足以满足该示例.我想迭代字典并更改Noneto的任何值False.这可以通过for循环轻松完成,但我想知道是否有一种惯用的方法来实现列表理解.如果它是一个对象而不是字典,我会这样做:

[setattr(k, v, False) for k, v in object if v is None]
Run Code Online (Sandbox Code Playgroud)

(或类似的),但我不知道如何在不使用的情况下这样做 dict.__setitem__

这对解决我的问题并不是非常重要,但我只是想知道是否有更简洁的方法来解决我的问题

python list-comprehension

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

选择分组查询的前 n 行

我将 PostgreSQL 与 SQLAlchemy 一起使用

我有一个 GPS 指标表,格式如下:

SELECT * FROM user_gps_location;
Run Code Online (Sandbox Code Playgroud)

我的输出:

| 编号 | 用户 ID | 进入时间 | 纬度 | 液化天然气| 准确度 | 海拔高度 | 速度|
| 1 | 54 | 54 2020-07-24 14:08:30.000000 | 54.42184220 | -110.21029370 | 41.42 | 41.42 512.40 | 512.40 0.07 | 0.07
| 2 | 54 | 54 2020-07-24 22:20:12.000000 | 54.42189750 | -110.21038070 | 13.00 | 512.60 | 512.60 0.00 | 0.00
| 3 | 26 | 26 2020-07-27 13:51:11.000000 …

sql postgresql select count greatest-n-per-group

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