【问题标题】:Running repetitive commands in terminal在终端中运行重复的命令
【发布时间】:2020-09-03 15:21:51
【问题描述】:

我对运行 shell 命令有点陌生。 目前我正在像这样在终端中一次执行这些:

python dna.py databases/small.csv sequences/1.txt
// result

python dna.py databases/small.csv sequences/2.txt
// result

python dna.py databases/small.csv sequences/3.txt
// result

etc...

有没有办法将所有这些命令放在一个文本文件中并运行一个命令来一次性执行它们?最后,我想通过管道将其传输到 results.txt 文件中。

【问题讨论】:

标签: python bash shell command-line terminal


【解决方案1】:

使用您选择的文本编辑器并将三个命令粘贴到彼此下方。保存该文件并打开一个终端窗口。切换到包含您刚刚创建的文件的文件夹并运行“chmod +x your_file_name_with_python_code_in_it”。

然后在终端“./your_file_name_with_python_code_in_it >> results.txt”中运行该文件

>> 将创建您的 python 代码反馈给控制台的内容并将其附加到日志文件中。

【讨论】:

  • 我在命令行运行了你的建议,它在这里给了我语法错误:SyntaxError: invalid syntax File "dna.py", line 32 dna_sequences = open(f"{sys.argv[1]}", "r").readline().strip()我的代码似乎正确并且在 IDE 中运行没有错误
  • 您是否将“your_file_name_with_python_code_in_it”文件保存在与“dna.py”相同的文件夹中?如果不是,应该是因为我看到您使用数据库和序列文件夹的相对路径名。
  • 是的,它在同一个文件夹中。出于某种原因,它不喜欢这一行:f"{argv[1]}", "r").readline().strip() 但是,当在命令行上单独运行每个命令时,程序在 ide 中工作
  • 当我在文本文件中将命令从“python”更改为“python3”时,这有效
【解决方案2】:

您可以迭代在 shell seq 上生成的序列

repeat=10
for n in $(seq 1 $repeat);  do python dna.py databases/small.csv sequences/${n}.txt; done

根据 Jetchisel 的建议,您可以支持扩展,这是 2009 年添加的 bash4 功能。

python dna.py databases/small.csv sequences/{1..3}.txt >> results.txt

使用 bash c 风格的 for 循环

start=1 end=3
for ((n=start;n<=end;n++)); do python dna.py database/small.csv sequences/"$n".txt

这将阻塞您的终端,直到您的进程完成,并且将被视为没有用户交互的前台进程。这里的重点是进程是否会阻塞其他进程的执行直到它终止。

您可以通过在命令行末尾添加&amp; 将前台进程变为后台进程。

【讨论】:

  • bash 有大括号扩展,不用seq 也能做重复任务,为什么要用呢?
  • @Jetchisel 据我所知,使用直接扩展行 python dna.py databases/small.csv sequences/{1..3}.txt 将返回 ambiguous redirect 对吗?
  • 我试过python3 watevver.py &gt;&gt; txt.{1..3}.py,它返回ambiguous redirect
猜你喜欢
  • 2016-04-05
  • 2013-05-10
  • 1970-01-01
  • 2019-12-22
  • 2021-02-17
  • 2018-12-28
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多