小编Wil*_*ell的帖子

Bash bug重新$ LINENO--或者我只是困惑?

考虑:

#!/bin/bash

echo '
' $LINENO
echo '' '
'  $LINENO

第一个回声正确打印4,但第二个回显打印5而不是6.我错过了什么,或者这是一个错误?(使用bash 3.00.15)

bash shell sh

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

告诉配置脚本使用--datarootdir的相对路径

我已经使用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 在运行时需要相对于当前目录的路径?

autoconf cross-compiling

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

生成读取错误

通过写入在测试套件中生成写入错误很简单/dev/full.是否有一种很好的技术来产生读错误?我目前正在使用LD_PRELOAD来覆盖,read但这似乎太复杂和不可移植(不是/ dev/full是可移植的......).

unix testing

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

Makefile:将命令行参数传递给Makefile中的文件

我的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中指定一个参数需要与该文件一起传递?

谢谢.

shell makefile command-line-arguments

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

如何在几秒钟内获得视频时长?

如何在几秒钟内获得视频时长?

我尝试过的:

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)

time awk duration ffmpeg

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

为什么`for i do cmd中不需要分隔符; done`

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)可怕的滥用语言吗?

bash shell language-lawyer

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

用于确定时态的CLI语法检查器

我喜欢在我的Git日志中使用现在时(例如,"添加功能"而不是"添加功能").目前,我有一个非常天真的Git钩子,如果日志消息的第一个单词以'ed'结尾,则中止提交,但我想要一个更强大的解决方案(其中'更强大'意味着'并非完全蹩脚').是否有一个语法检查器,使我能够编写一个脚本:

echo $TEXT | check-grammar --present-tense || exit 1 

我不需要一个完美的解决方案,只需要比匹配/ ^\w*ed\W /更好的解决方案.

git grammar nlp

6
推荐指数
0
解决办法
625
查看次数

是否应在源代码或CPPFLAGS中指定标准?

#define _BSD_SOURCE或设置CPPFLAGS = -D_BSD_SOURCE更好吗?

在我看来,如果一段源代码依赖于特定的标准,最好用#define在代码本身中明确地拼写出来.但是,很多评论都建议在编译行上指定标准更合适.从源代码中省略标准并仅在编译时指定它有什么好处?

c c++ build-process compilation

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

从类外的现有方法创建staticmethod?("未绑定方法"错误)

在定义类之后,如何使类方法保持静态?换句话说,为什么第三种情况会失败?


>>> 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)

python

5
推荐指数
2
解决办法
187
查看次数

在 csh 中“来源”时如何使退出行为

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 是否可以选择更改行为?)

csh

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