小编Eug*_*sca的帖子

提取tar.gz存档时为什么会出现重复文件

我对tar.gz档案有一个奇怪的问题,我不明白.

我在Linux服务器上创建存档 tar -czf

当我在Windows机器上使用它们提取它们时7z x,我总是收到一些(不是所有)文件已经存在的通知.(它们被提取到一个空目录.)

它想要替换的文件具有今天的日期,已经存在的文件具有它们在服务器上的原始(修改日期)日期.

由于我想保留原始时间戳,我可以使用-aos7z选项,但我想了解为什么会发生这种情况,并确保在本地解包后我在服务器上有相同的镜像镜像.

shell 7zip tar

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

如何在GNU Makefile中只获取没有扩展名的文件名?

我从其他帖子中得到了这个答案。以下打印带有扩展名的文件名。这仅适用于 cpp 文件,不适用于FILE_NAME在 C 代码中检索此预处理器值时的头文件。

-D FILE_NAME=\"$(<F)\"
Run Code Online (Sandbox Code Playgroud)

如何只获取没有扩展名的源文件名?

c++ makefile

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

实时 TCL 执行输出

我有以下场景:

if { [catch { exec echo calling a BIG script } exec_msg] } {
    puts "NOK"
    puts "output of the BIG script: $exec_msg"
} else {
    puts "OK"
    puts "output of the BIG script: $exec_msg"
}
Run Code Online (Sandbox Code Playgroud)

是否有任何解决方案可以实时打印 $exec_msg ,与 BIG 脚本的执行同步?

tcl try-catch exec

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

为什么bash函数使用圆括号,如果它们从不填充参数?

各种语言的函数定义语法是:

C(所有脚本语言的教父):

func_type myfunc_c (arg_type arg_name , ...)
{
    /* arguments explicitly specified */
}
Run Code Online (Sandbox Code Playgroud)

TCL:

proc myfunc_tcl {arg1 arg2 args} {
    # arguments explicitly specified
}
Run Code Online (Sandbox Code Playgroud)

Perl的:

sub myfunc_perl {
    # no arguments explicitly specified && no round brackets used
}
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

def myfunc_python(arg1, arg2):
    # arguments explicitly specified
Run Code Online (Sandbox Code Playgroud)

击:

function myfunc_bash () {
    # arguments NEVER explicitly specified
    # WHY using round brackets?
}
Run Code Online (Sandbox Code Playgroud)

为什么在bash中使用圆括号?

bash

3
推荐指数
2
解决办法
463
查看次数

保留中间文件的 Makefile 规则

为了调试一个复杂的 XSLT 转换,我将它分成几个部分:首先我构建%.1.xml,然后我用它来构建%.2.xml,最后我构建%.3.xml. 一切正常,但是如果我要求 Make 构建最后一个,那么 Make 总是会删除中间的%.1.xml%.2.xml,而我宁愿保留它们。我试图将所有.xml文件标记为.PRECIOUS

.PRECIOUS: %.xml
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。(我也尝试使用%.1.xmland %.2.xml,但这也不起作用。然后我尝试以.SECONDARY相同的方式将它们标记为相同的负面结果。它不删除中间文件的唯一方法是当文件已经存在;在这种情况下,它只重建它们。但如果文件不存在,它总是删除它们。

我错过了什么?

GNU 制作 4.1。

更新: Makefile,>>代表TAB

sample-%.1.xml: sample-%.0.xml job.1.xslt job.xslt
   >>   xsltproc $(filter %.1.xslt,$^) $(filter %.xml,$^) > $@
sample-%.2.xml: sample-%.1.xml job.2.xslt job.xslt
   >>   xsltproc $(filter %.2.xslt,$^) $(filter %.xml,$^) > $@
sample-%.3.xml: sample-%.2.xml job.3.xslt job.xslt
   >>   xsltproc $(filter %.3.xslt,$^) $(filter %.xml,$^) > $@
.SECONDARY: %.xml   # …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

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

获取git命令列表

我想为每个git命令创建一个别名.

因为它们中有很多,我想把它们放在一个列表中然后在我的循环中循环.bashrc.

有没有办法让它们在shell脚本中?

git bash git-commands

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

带条件检查的 git 别名

翻译这个shell命令:

$> sh -c 'if [ 1 -eq 1 ]; then echo TRUE; else echo FALSE; fi'
TRUE
Run Code Online (Sandbox Code Playgroud)

到这个 git 别名~/.gitconfig

[alias]
    test = !sh -c 'if [ 1 -eq 1 ]; then echo TRUE; else echo FALSE; fi'
Run Code Online (Sandbox Code Playgroud)

结果是:

$> git test
<output-omitted> Syntax error: Unterminated quoted string
Run Code Online (Sandbox Code Playgroud)

PS:不想将 shell 脚本映射到 git 别名。

PS2:正如@Cyrus@CodeWizard所提到的,需要一对额外的引号来保护别名定义免受多级扩展。避免使用@choroba提供的分号的好技巧。谢谢大家。

git bash shell sh

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

chmod()是否需要前导零才能正常工作?

我正在尝试chmod()从我的C程序调用该函数,但它没有设置正确的权限,除非mode_t参数中有前导零.例如,chmod(argv[2],00777)将工作,但chmod(argv[2],777)将设置权限以完成垃圾.

当我尝试使用atoi()时会出现一个大问题,因为它会丢弃任何前导零.即使用户在命令行中输入没有前导零的值,我有什么方法可以使下面的程序工作?

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

int main(int argc, char** argv)
{  
    if (argc != 3)
        exit(EXIT_FAILURE);

    if (chmod(argv[2], (mode_t)atoi(argv[1])) != 0)
        printf("Warning: Unable to change file permissions.");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c atoi chmod

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

从文件中提取版本字符串的最佳方法是什么?

我想使用一个文件存储一个客户软件的当前版本号,启动脚本可以使用该文件在正确的目录中运行二进制文件.

例如,如果运行目录如下所示:

.
..
1.2.1
1.2.2
1.3.0
run.sh
current_version
Run Code Online (Sandbox Code Playgroud)

而且current_version包含:

1.2.2
Run Code Online (Sandbox Code Playgroud)

我想run.sh进入1.2.2并运行程序foo.

目前的解决方案是:

#!/bin/sh
version = `cat current_version`
cd $version
./foo
Run Code Online (Sandbox Code Playgroud)

它工作但不是很强大.它不检查文件是否存在,无法处理多行,前导空格,注释行,空白文件等.

使用shell或perl脚本执行此操作的最可行方法是什么?

bash scripting perl

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

使用正则表达式进行bash搜索吗?

使用正则表达式进行bash搜索吗?

例如,如果我想执行一个for循环,它遍历以字母开头的当前目录的所有文件a,那么下面的工作会是什么?

for x in a.*
do
Run Code Online (Sandbox Code Playgroud)

regex syntax bash shell sh

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

标签 统计

bash ×5

shell ×3

git ×2

makefile ×2

sh ×2

7zip ×1

atoi ×1

c ×1

c++ ×1

chmod ×1

exec ×1

git-commands ×1

gnu-make ×1

perl ×1

regex ×1

scripting ×1

syntax ×1

tar ×1

tcl ×1

try-catch ×1