考虑:
#!/bin/bash echo ' ' $LINENO echo '' ' ' $LINENO
第一个回声正确打印4,但第二个回显打印5而不是6.我错过了什么,或者这是一个错误?(使用bash 3.00.15)
我已经使用GNU autoconf为我的程序生成配置脚本,我现在正尝试为Windows进行交叉编译.
在Linux下,要改变我提供的数据文件的位置,--datarootdir=/blah
哪个工作正常.但是在Windows下,我的应用程序的路径在运行时才会知道(因为用户可以选择在任何地方安装它.)因此,我想将数据目录设置为当前目录,无论应用程序何时可以推出.
不幸的是,传球--datarootdir=.
不起作用:
configure: error: expected an absolute directory name for --datarootdir: .
Run Code Online (Sandbox Code Playgroud)
如何告诉Autoconf/configure 在运行时需要相对于当前目录的路径?
通过写入在测试套件中生成写入错误很简单/dev/full
.是否有一种很好的技术来产生读错误?我目前正在使用LD_PRELOAD来覆盖,read
但这似乎太复杂和不可移植(不是/ dev/full是可移植的......).
我的Makfile里面有以下内容,
smktestrun: smktest
@../projects/test.sh
Run Code Online (Sandbox Code Playgroud)
我用这个叫做:
Make smktestrun
Run Code Online (Sandbox Code Playgroud)
但有时我需要传递一个参数/参数和这个文件(test.sh)
所以基本上我想:
test.sh -abc
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是在Makefile本身中传递参数,那么参数不会被简单地视为执行剪切脚本.
那么有没有一种方法可以在Makefile中指定一个参数需要与该文件一起传递?
谢谢.
如何在几秒钟内获得视频时长?
我尝试过的:
ffmpeg -i file.flv 2>&1 | grep "Duration"
Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s
mediainfo file.flv | grep Duration
Duration : 39mn 43s
Run Code Online (Sandbox Code Playgroud)
这接近,但它不是那么准确,2383是39.71分钟
ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383
Run Code Online (Sandbox Code Playgroud) for i do echo $i; done
Run Code Online (Sandbox Code Playgroud)
这怎么合法?(我希望它用一个额外的分号写成for i; do echo $i; done
)它适用于bash,dash,zsh和ksh.标准(我的意思是http://pubs.opengroup.org/onlinepubs/9699919799/)指出:
The for loop requires that the reserved words do and done be used to
delimit the sequence of commands. The format for the for loop is as follows:
for name [ in [word ... ]]
do
compound-list
done
Run Code Online (Sandbox Code Playgroud)
很明显,当省略"in word"时,它do
就是一个分隔符.因此暗示似乎是[ in [word .. ]]
实际属于右侧右括号内的分隔符(换行符).有人能指出标准中的任何理由证明这种(IMO)可怕的滥用语言吗?
我喜欢在我的Git日志中使用现在时(例如,"添加功能"而不是"添加功能").目前,我有一个非常天真的Git钩子,如果日志消息的第一个单词以'ed'结尾,则中止提交,但我想要一个更强大的解决方案(其中'更强大'意味着'并非完全蹩脚').是否有一个语法检查器,使我能够编写一个脚本:
echo $TEXT | check-grammar --present-tense || exit 1
我不需要一个完美的解决方案,只需要比匹配/ ^\w*ed\W /更好的解决方案.
#define _BSD_SOURCE或设置CPPFLAGS = -D_BSD_SOURCE更好吗?
在我看来,如果一段源代码依赖于特定的标准,最好用#define在代码本身中明确地拼写出来.但是,很多评论都建议在编译行上指定标准更合适.从源代码中省略标准并仅在编译时指定它有什么好处?
在定义类之后,如何使类方法保持静态?换句话说,为什么第三种情况会失败?
>>> class b: ... @staticmethod ... def foo(): ... pass ... >>> b.foo() >>> class c: ... def foo(): ... pass ... foo = staticmethod( foo ) ... >>> c.foo() >>> class d: ... def foo(): ... pass ... >>> d.foo = staticmethod( d.foo ) >>> d.foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method foo() must be called with d instance as first argument (got nothing instead)
csh
是一个非常可怕的外壳。(预先声明以避免“不要使用 csh”的不可避免的评论,或者我可能只是为了任何读者而声明:请,如果您重视自己的理智,请不要使用csh
。)我有一个csh
我试图使大量脚本变得有用,我刚刚发现exit
从源文件调用时不会退出脚本。换句话说:
#!/bin/csh
source [file with content "exit"]
echo No reasonable script should print this
Run Code Online (Sandbox Code Playgroud)
产生输出。
有什么办法可以修改这种行为吗?据我所知,我正在修改的脚本的原始作者打算终止主脚本,这当然是可取的行为,并且简单地通过调用上面的示例sh
产生该结果,但是什么给出了?这种行为有什么合理的目的吗?(这只是我在咆哮,真正的问题是:csh 是否可以选择更改行为?)