我正在尝试编写一个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)
我如何使这项工作适用于所有论点?
试图为数据包嗅探器编写处理程序.我遇到了铸造问题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) 我有一个权限字典,如下:
{'READ': True, 'WRITE': None, 'DELETE': False}
Run Code Online (Sandbox Code Playgroud)
实际字典有更多的键,但这足以满足该示例.我想迭代字典并更改None
to的任何值False
.这可以通过for循环轻松完成,但我想知道是否有一种惯用的方法来实现列表理解.如果它是一个对象而不是字典,我会这样做:
[setattr(k, v, False) for k, v in object if v is None]
Run Code Online (Sandbox Code Playgroud)
(或类似的),但我不知道如何在不使用的情况下这样做 dict.__setitem__
这对解决我的问题并不是非常重要,但我只是想知道是否有更简洁的方法来解决我的问题
我将 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 …