我正在学习计算微生物学教程:
- 威廉·林德斯特罗姆、加勒特·莫里斯、克里斯托夫·韦伯和露丝·休伊 (2008-01-29)。使用 AutoDock 4 进行虚拟筛选。斯克里普斯研究所。
第 10 页包含ex01.csh
(原始未缩进,由 StackExchange 参与者添加的缩进):
foreach f (tmp*)
echo $f
set zid = `grep ZINC $f`
if !(-e "$zid".mol2) then
set filename = "$zid".mol2
else foreach n (`seq –w 1 99`)
if !(-e "$zid"_"$n".mol2) then
set filename = "$zid"_"$n".mol2
break
endif
end
endif
mv –v $f $filename
end
我想运行上面的命令。过去两天我一直在尝试解决这个问题,但失败了。每一次,在第一步的时候,
foreach f (tmp*)
它说
bash : syntax near unexpected error '('
我对 Linux 的了解为零,并且只是按照我在教程中看到的内容进行操作。我该如何解决我的问题?
答案1
正如 @Archemar 正确指出的那样,这是一个 cshell 脚本,它不能在默认的 Linux shell 中运行。
如果在 Debian 中执行以下操作:
apt-get install tcsh
并添加为脚本的第一行:
#!/bin/tcsh
答案2
您引用的教程csh
自始至终都在使用 shell,但您正在尝试使用bash
shell 来执行它(从您收到的错误消息中可以明显看出)。
这两个 shell 的语法非常不同,不能互换使用来运行脚本。将它们视为两种独立的编程语言。
确保脚本具有
#!/bin/csh
第一行(此后没有其他内容,我在教程中发现一个脚本,该脚本立即在同一行上有注释,这是错误的)。chmod +x script.csh
通过发出命令(其中script.csh
是包含脚本的文件的名称)来确保脚本可执行。使用 运行脚本
./script.csh
。
或者:
- 通过显式向解释器提供 来运行脚本
csh script.csh
。
显然,如果csh
您的系统上没有安装,您必须首先处理它。根据您的 Unix 使用的包管理器,可以通过不同的方式完成此操作。
如今,看到为 shell 脚本编写的情况相当罕见csh
,尤其是在免费的 Unices 上,因为大多数人都将其默认设置切换为bash
、 some ksh
-variant 或某些其他sh
兼容的 shell。
Tom Christiansen(Perl 人)在 1994 年写了一篇文章,几年前我经常看到它被引用得更频繁,但现在却很少见了(可能是因为许多用户根本不知道存在兼容外壳以外的任何东西sh
)。它的标题是“CSH 编程被认为是有害的”。