小编LiM*_*Mar的帖子

有没有办法编写一个bash函数来中止整个执行,无论它是如何被调用的?

我在我的bash函数中使用"exit 1"语句来终止整个脚本,它工作正常:

function func()
{
   echo "Goodbye"
   exit 1
}
echo "Function call will abort"
func
echo "This will never be printed"
Run Code Online (Sandbox Code Playgroud)

但后来我意识到,当调用它时它不起作用:

res=$(func)
Run Code Online (Sandbox Code Playgroud)

据我所知,我创建了一个子shell,"退出1"中止了子shell而不是主要的....

有没有办法编写一个中止整个执行的函数,无论它如何被调用?我只需要获得真正的返回值(由函数回应).

bash function exit subshell

70
推荐指数
2
解决办法
4万
查看次数

Version Control软件,用于保存POSIX FS(ext3/ext4)中的所有文件及其元数据

情景

我正在为一些嵌入式Linux设备开发Root FS.它位于主机上,通过NFS导出,我的开发板安装位于"/"下.我需要的工作流程是: - 将我的FS共享给其他开发人员(他们拥有自己的开发板) - 将我的Root FS备份到某个"服务器" - 将我的Root FS部署到闪存盘或其他媒体上 - 跟踪Root FS中特定文件的更改,分支和合并,回滚等.

伙计们,这在我看来是一个版本控制场景,我甚至使用git.

问题

如你所知Git(和svn/mercurial/bazaar一样!)1)不存储特殊文件(/ dev等下的设备文件)2)不存储文件所有者和权限.我希望按原样存储所有内容.

问题:

你知道一些能做这项工作的VCS吗?或者你可能知道另一个(但简单的)解决方案来做我的场景?

这是一个常见的问题......

我相信它是,因为到现在为止我已经听说过脚本/钩子/自定义软件,每个人(!)为他的目的而工作.我所需要的只是一个吃饱的VSS

谢谢 !!

linux git embedded version-control

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

在多个线程/进程之间共享标准输出

我有一个Linux程序(语言无关紧要),它将程序的日志打印到stdout上。监视过程所需的日志IS。

现在,我将通过派生或使用线程对其进行并行化。

问题:生成的标准输出将包含不相关行的不可读混合...

最后是问题:您将如何为并行进程重构输出逻辑?

linux multithreading stdout

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

如何跨多行分割很长的案例模式?

我怎么能在下面的bash代码中拆分long valueX字符串?

case "$1" in
    value1|value2|value3|...........more values..................| valueN)
        some_processing "$@"
        ;;
    ...
esac
Run Code Online (Sandbox Code Playgroud)

我正在寻找分成不同的行.Mb喜欢:

VAL+=value1
VAL+=value2
....
Run Code Online (Sandbox Code Playgroud)

提前致谢

string bash split switch-statement

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

同时连接linux和windows的路径

我有一个脚本(python)应该建立两个路径 - 一个是Linux形式(本地),另一个是Windows形式(Windows共享)

如果重要的话,脚本在Linux下运行.

os.path对Windows路径没有帮助.python是否有一些帮助这个案例?

任何智能连接消除额外的分隔符将有助于......

python concatenation path

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

Android 构建系统:如何从 .t​​ar 文件中包含预构建文件?

我正在构建一个定制的 Android 系统 (JellyBean)。

我有一个项目(来自上游)包含一个 .tar 文件,它应该在构建时解压缩,它的内容应该被复制到结果目录树中的某个位置。我应该如何构建makefile来做到这一点?

我尝试了以下方法:

1) 使用 un-tar 指令编写 Android.mk(在带有 tar 的 git 中)并使用“PRODUCT_COPY_FILES += ...”

这不起作用,因为 PRODUCT_COPY_FILES 不能在 Android.mk 中使用

2) 使用 untar 说明和一些包含在 AndroidProducts.mk 中的产品定义 mk 文件编写 Android.mk,其中包含“PRODUCT_COPY_FILES += ...”

这不起作用,因为解压缩发生在“PRODUCT_COPY_FILES += (ls /untared/dir/*)”之后,因此 PRODUCT_COPY_FILES 结果为空。

3) 编写产品定义 mk 文件做 untar 然后“PRODUCT_COPY_FILES += ...”

这有效但不是很好,因为构建系统在多个位置包含此文件并且解压缩发生多次(~10)这会减慢构建速度并且不好......

android makefile build tar android-source

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

NSBezierPath setLineDash不会产生任何影响

正如标题所说,setLineDash应用于我NSBezierPath并没有改变描边线.完全没有效果.

我希望它让我的线破灭.请参见图片上的两条垂直红线.

码:

NSBezierPath* p= [NSBezierPath bezierPath];
CGFloat x = r.origin.x + r.size.width/2;

float dash_pattern[]={15.,15.};
NSInteger count = sizeof(dash_pattern)/sizeof(dash_pattern[0]);
[p setLineDash:(CGFloat*)dash_pattern count:count phase:0.]; // no effect ?

[p moveToPoint:NSMakePoint(x, r.origin.y+r.size.height)];
[p lineToPoint:NSMakePoint(x, [view bounds].origin.y+[view bounds].size.height)];
[[NSColor redColor]set];

[p stroke];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

macos graphics cocoa objective-c

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

使用set -e时,bash单行条件失败

我开始在我的bash脚本中使用set -e,并发现简短形式的条件表达式会破坏脚本执行.

例如,以下行应检查$ var是否为空:

[ -z "$var" ] && die "result is empty"
Run Code Online (Sandbox Code Playgroud)

但是当$ var的长度非零时,会导致脚本无声退出.

我在很多地方使用过这种形式的条件表达式......

我该怎么做才能让它正常运行?用"if"构造重写一切(这会很难看)?还是放弃"set -e"?

编辑:每个人都在要求代码.这是完整的[非]工作示例:

#!/bin/bash
set -e

function check_me()
{
    ws="smth"
    [ -z "$ws" ] && echo " fail" && exit 1
}

echo "checking wrong thing"
check_me
echo "check finished"
Run Code Online (Sandbox Code Playgroud)

我希望它能在函数调用之前和之后打印两个回声.但是它在check_me函数中默默地失败了.输出是:

checking wrong thing
Run Code Online (Sandbox Code Playgroud)

bash

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