我一直在成功使用此命令,它更改了配置文件中的变量,然后在循环中执行 Python 脚本:
for((i=114;i<=255;i+=1)); do echo $i > numbers.txt; python DoMyScript.py; done
Run Code Online (Sandbox Code Playgroud)
由于每个DoMyScript.py实例在终止前运行大约需要 30 秒,我想将它们降级到后台,同时可以生成下一个。
我已经尝试了我熟悉的方法,添加了一个&符号,如下所示:
for((i=114;i<=255;i+=1)); do echo $i > numbers.txt; python DoMyScript.py &; done
Run Code Online (Sandbox Code Playgroud)
但是,这会导致以下错误:
-bash: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud) 假设我有一个名为file:
$ cat file
Hello
Welcome to
Unix
Run Code Online (Sandbox Code Playgroud)
我想and Linux在文件最后一行的末尾添加。如果我这样做echo " and Linux" >> file将被添加到一个新行。但我想要最后一行Unix and Linux
所以,为了解决这个问题,我想删除文件末尾的换行符。因此,如何删除文件末尾的换行符以便向该行添加文本?
有没有一种简单的方法来替换/评估文件中的环境变量?假设我有一个config.xml包含以下内容的文件:
<property>
<name>instanceId</name>
<value>$INSTANCE_ID</value>
</property>
<property>
<name>rootPath</name>
<value>/services/$SERVICE_NAME</value>
</property>
Run Code Online (Sandbox Code Playgroud)
...等等。我想$INSTANCE_ID用INSTANCE_ID环境变量的值替换文件$SERVICE_NAME中的SERVICE_NAMEenv var的值。我不会先验地知道需要哪些环境变量(或者,如果有人向配置文件添加了新的环境变量,我不想更新脚本)。谢谢!
scripting shell-script text-processing environment-variables
我有一个扫描的 PDF 文件,其中两个不同的真实页面一起出现在一个虚拟页面上。
分辨率质量很好。问题是我在阅读时必须缩放并从左向右拖动。
是否有一些命令 ( convert, pdftk, ...) 或脚本可以将此 pdf 文件转换为普通页面(书中的一页 = pdf 文件中的一页)?
在工作中,我经常编写 bash 脚本。我的主管建议将整个脚本分解为函数,类似于以下示例:
#!/bin/bash
# Configure variables
declare_variables() {
noun=geese
count=three
}
# Announce something
i_am_foo() {
echo "I am foo"
sleep 0.5
echo "hear me roar!"
}
# Tell a joke
walk_into_bar() {
echo "So these ${count} ${noun} walk into a bar..."
}
# Emulate a pendulum clock for a bit
do_baz() {
for i in {1..6}; do
expr $i % 2 >/dev/null && echo "tick" || echo "tock"
sleep 1
done
}
# Establish run order
main() { …Run Code Online (Sandbox Code Playgroud) 问题:找出我有多少贝壳深。
详细信息:我经常从 vim 中打开外壳。构建并运行并退出。有时我忘记在里面打开另一个vim,然后打开另一个shell。:(
我想知道我有多少贝壳,甚至可能一直在我的贝壳屏幕上显示它。(我可以管理那部分)。
我的解决方案:解析进程树并查找 vim 和 bash/zsh 并找出当前进程在其中的深度。
这样的东西已经存在了吗?我找不到任何东西。
我正在寻找一个命令,它将返回一个目录的所有者,而且只有那个——例如解析ls -lat命令的正则表达式或类似的东西?我想在另一个脚本中使用结果。
为了找出 Bash (v4+) 脚本中的某些操作需要多长时间,我想time“单独”解析命令的输出,并(最终)在 Bash 变量 ( let VARNAME=...) 中捕获它。
现在,我正在使用time -f '%e' ...(或者更确切地说command time -f '%e' ...是因为内置了 Bash),但是由于我已经重定向了执行命令的输出,我真的不知道我将如何捕获time命令的输出。基本上这里的问题是到输出分离的time从被执行的命令(或多个)的输出。
我想要的是计算启动命令和完成命令之间的时间(以秒为单位)的功能。它不必是time命令或相应的内置命令。
编辑:鉴于以下两个有用的答案,我想添加两个说明。
date到目前为止使用的解决方案接近我想要的。
当我尝试跑步时./script.sh我得到了Permission denied但是当我跑步时bash script.sh一切都很好。
我做错了什么?
所以我喜欢尽可能地强化我的 bash 脚本(并且当不能委托给像 Python/Ruby 这样的语言时)以确保错误不会被发现。
在这种情况下,我有一个 strict.sh,其中包含以下内容:
set -e
set -u
set -o pipefail
Run Code Online (Sandbox Code Playgroud)
并在其他脚本中获取它。然而,虽然 pipefail 会出现:
false | echo it kept going | true
它不会拿起:
echo The output is '`false; echo something else`'
Run Code Online (Sandbox Code Playgroud)
输出将是
输出是''
False 返回非零状态和非标准输出。在管道中它会失败,但在这里没有发现错误。当这实际上是存储在变量中的计算供以后使用,并且该值设置为空白时,这可能会导致以后出现问题。
那么 - 有没有办法让 bash 将反引号内的非零返回码视为足以退出的理由?
shell-script ×10
bash ×6
command-line ×2
conversion ×1
function ×1
ls ×1
mount ×1
newlines ×1
pdf ×1
permissions ×1
process ×1
scripting ×1
shell ×1
time ×1
vim ×1
zsh ×1