所以,我删除了我的主文件夹(或者,更准确地说,我有写权限的所有文件)。发生的事情是我有
build="build"
...
rm -rf "${build}/"*
...
<do other things with $build>
Run Code Online (Sandbox Code Playgroud)
在 bash 脚本中,在不再需要之后$build,删除声明及其所有用法——但是rm. Bash 愉快地扩展到rm -rf /*. 是的。
我觉得自己很傻,安装了备份,重新做我丢失的工作。试图摆脱耻辱。
现在,我想知道:编写 bash 脚本的技巧是什么,以便此类错误不会发生,或者至少不太可能发生?例如,我是否写过
FileUtils.rm_rf("#{build}/*")
Run Code Online (Sandbox Code Playgroud)
在 Ruby 脚本中,解释器会抱怨build没有被声明,所以语言保护了我。
我在 bash 中考虑过的,除了 corraling rm(正如相关问题中提到的许多答案一样,这并非没有问题):
rm -rf "./${build}/"*rm在当前目录之外操作时,它的变体/参数化需要交互。(找不到。)类似的效果。是这样,还是有其他方法可以编写在这个意义上“健壮”的 bash 脚本?
我试图找出有关缓存的细节(特别是哪些缓存在内核之间共享,哪些不是)并且发现了不一致。
sudo lshw 说
*-cache:0
description: L1 cache
physical id: a
slot: Internal Cache
size: 64KiB
capacity: 64KiB
capabilities: synchronous internal write-back
*-cache:1
description: L2 cache
physical id: b
slot: External Cache
size: 8MiB
capabilities: synchronous internal write-back
Run Code Online (Sandbox Code Playgroud)
但lscpu声称
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
Run Code Online (Sandbox Code Playgroud)
我不太担心指令和数据缓存加在一起,但是L2去哪儿了?
在运行 Ubuntu 10.10 的机器上观察,或者uname -a说:
Linux name 2.6.35-32-generic #66-Ubuntu SMP Mon Feb 13 21:04:32 UTC 2012 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
这是一个普遍的问题,但请注意,我能找到的最精确的制造商规范和维基百科都没有必要的细节。
无关的奖励问题:是否 …
网络上有多种资源解释了如何将 PDF 拆分为多个文件,每个文件在一页上。
但是你怎么能把它们分成几块,比如每块五页?我已经研究了标准工具,例如pdftk但找不到做我想做的选择。
我一直在尝试让Redshift在登录前启动,以便明亮的欢迎屏幕不会让我蒙蔽,尤其是在切换用户时。
似乎没有完全支持将 Redshift 作为服务运行(参见例如这个 bug),但原则上似乎是可能的。
在尝试了在 AskUbuntu 上发现的一些东西但没有成功之后,我目前的尝试是建立自己的暴发户任务;这是我的/etc/init/redshift.conf:
# Redshift
description "Redshift"
author "dude@somewhere.com"
start on (started lightdm)
script
exec redshift -c /etc/redshift.conf
end script
stop on runlevel [016]
Run Code Online (Sandbox Code Playgroud)
我认为在 LightDM 运行后开始应该会奏效,然后停止。
现在,这最终出现在我的日志文件中/var/log/upstart/redshift.log:
`RANDR Query Version' returned error -1
Initialization of randr failed.
Run Code Online (Sandbox Code Playgroud)
谷歌搜索错误信息不是很丰富。我想我还为时过早,一些服务或其他与显示魔法相关的服务尚未运行。
我的start on表情应该是什么?
Ubuntu 14.04 LTS;3.13.0-77-generic #121-Ubuntu SMP ... x86_64 GNU/Linux;
红移 1.8;RandR 服务器版本 1.4;新贵 1.12.1
继本文之后,我使用GPP为 Markdown 解析器pandoc提供了一些宏。不幸的是,gpp似乎将所有空格复制到结果中。
例如,考虑文件 test.md
% Title
% Raphael
% 2012
\lorem \ipsum
Run Code Online (Sandbox Code Playgroud)
和 test.gpp
\define{lorem}{Lorem}
\define{ipsum}{ipsum...}
Run Code Online (Sandbox Code Playgroud)
现在,调用gpp -T --include test.gpp test.md收益
<empty line>
% Title
% Raphael
% 2012
Lorem ipsum...
Run Code Online (Sandbox Code Playgroud)
这打破了pandoc. 额外的换行符确实是定义之间的换行符;如果我使用
\define{lorem}{Lorem}@@@
\define{ipsum}{ipsum...}
Run Code Online (Sandbox Code Playgroud)
使用额外选项+c "@@@" "\n",空行消失了。但是这种变通方法不仅丑陋,而且还有两个致命的缺陷。
首先,它也将其视为@@@源文件中的注释指示符。正如@@@Markdown 中没有禁止的那样,当@@@(或任何其他选择的分隔符)发生在源文件中时,这可能会产生意想不到的后果。
其次,由于适当的缩进,它不会覆盖行开头的空格。例如,
\define{lorem}{@@@
\if{a == a}@@@
@@@
\endif@@@
}@@@
Run Code Online (Sandbox Code Playgroud)
将导致所有此类图像标签缩进四个空格,从而pandoc将其排版为代码(如指定)。
因此,如果没有gpp在一行中编写文件或引入丑陋的行尾注释而不是缩进,您可以做些什么来防止gpp在整个地方涂抹多余的空格?
我有一个用于我的 RaspberryPi(运行 Raspbian)的 bash 脚本,它应该将多个文件名作为参数并一个接一个地播放(使用omxplayer)。基本结构是这样的:
#!/bin/bash
for f in ${*}
do
echo "${f}";
done;
Run Code Online (Sandbox Code Playgroud)
现在当输入文件名包含空格时我遇到了问题;特别是,行为似乎不一致。假设我们有两个文件test a b并且test d e在同一个目录中。使用不同的参数运行上面的脚本会产生以下结果:
$ ./test test\ a\ b
test
a
b
$ ./test "test a b"
test
a
b
$ ./test test\ a*
test
a
b
$ ./test "test a*"
test
a*
Run Code Online (Sandbox Code Playgroud)
但是,奇怪的是:
./test "test*"
test a b
test d e
Run Code Online (Sandbox Code Playgroud)
显然,只有最后一个变体才能提供预期的输出。但是,使用起来很麻烦,特别是如果您想观看单个文件(制表符完成将填充整个名称)或者文件路径中的文件夹名称之一包含空格时。
我可以在 shellscript 中做些什么不同的事情,以便它始终按预期运行?特别是,两者
$./test test*
$./test test\ a\ b test\ d\ e
Run Code Online (Sandbox Code Playgroud)
应该产生相同的输出
test a b …Run Code Online (Sandbox Code Playgroud) 我理解的方式man avconv(版本9.16-6:9.16-0ubuntu0.14.04.1),以下命令应转换input.ogg为output.mp3并结转元数据:
avconv -i input.ogg -map_metadata 0 output.mp3
Run Code Online (Sandbox Code Playgroud)
然而,它没有;ogginfo清楚地显示信息(艺术家、专辑、标题等)input.ogg并id3info确认其output.mp3具有空 (ID3) 标签。
转换ogg为flac或(大概)格式的任何组合时也会发生同样的情况。
我的理解有-map_metadata误吗?有没有办法在格式之间转换并保留标签(没有像这样的硬编码)?
与这个问题类似,我有一些应用程序(Calibre、texdoc)使用 Mendeley 打开 PDF。从 Thunar、Thunderbird、Firefox 等打开 PDF 会打开 evince,这是预期的默认设置。
这些应用程序似乎使用了xdg-open:
$ xdg-mime query default application/pdf
mendeleydesktop.desktop
Run Code Online (Sandbox Code Playgroud)
我试图找到它的来源,但没有成功;我用它修复了
xdg-mime default evince.desktop application/pdf
Run Code Online (Sandbox Code Playgroud)
问题仍然是:xdg-openMendeley 应该成为默认 PDF 查看器的想法是从哪里来的?
我使用的是 Ubuntu 16.04 和 i3 4.11。xdg-open版本为 1.1.0 rc3。