我对tar.gz档案有一个奇怪的问题,我不明白.
我在Linux服务器上创建存档 tar -czf
当我在Windows机器上使用它们提取它们时7z x,我总是收到一些(不是所有)文件已经存在的通知.(它们被提取到一个空目录.)
它想要替换的文件具有今天的日期,已经存在的文件具有它们在服务器上的原始(修改日期)日期.
由于我想保留原始时间戳,我可以使用-aos7z选项,但我想了解为什么会发生这种情况,并确保在本地解包后我在服务器上有相同的镜像镜像.
我从其他帖子中得到了这个答案。以下打印带有扩展名的文件名。这仅适用于 cpp 文件,不适用于FILE_NAME在 C 代码中检索此预处理器值时的头文件。
-D FILE_NAME=\"$(<F)\"
Run Code Online (Sandbox Code Playgroud)
如何只获取没有扩展名的源文件名?
我有以下场景:
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 脚本的执行同步?
各种语言的函数定义语法是:
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中使用圆括号?
为了调试一个复杂的 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) 我想为每个git命令创建一个别名.
因为它们中有很多,我想把它们放在一个列表中然后在我的循环中循环.bashrc.
有没有办法让它们在shell脚本中?
翻译这个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提供的分号的好技巧。谢谢大家。
我正在尝试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) 我想使用一个文件存储一个客户软件的当前版本号,启动脚本可以使用该文件在正确的目录中运行二进制文件.
例如,如果运行目录如下所示:
.
..
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搜索吗?
例如,如果我想执行一个for循环,它遍历以字母开头的当前目录的所有文件a,那么下面的工作会是什么?
for x in a.*
do
Run Code Online (Sandbox Code Playgroud)