我正在尝试创建一个脚本,它将在列表中的每个文件上运行一个程序。我一直在尝试使用.csh文件(我不知道这是否是最好的方法),我从类似hello world这样的简单方法开始
echo "hello world"问题是我不能执行这个脚本,也不能验证它是否正常工作。(我试图做./testscript.csh,这显然是错误的)。我还没有找到任何真正解释如何运行C脚本的东西,我猜还有一种更好的方法来做到这一点。我需要进行哪些更改才能使其正常工作?
发布于 2011-07-13 03:42:05
您需要将其标记为可执行文件;Unix不会基于扩展随意执行。
chmod +x testscript.csh此外,我强烈推荐using sh or bash instead of csh,否则您很快就会了解csh的循环和控制流构造的特性(有些东西只有在以特定方式完成时才能在它们内部工作,特别是在单行版本中,这些东西非常有限)。
发布于 2011-07-13 03:43:18
可以使用./testscript.csh。但是,您需要首先使其可执行:
chmod u+x testscript.csh这意味着将testscript设置为具有用户的执行权限(无论文件的所有者是谁-在本例中应该是您自己!)
另外,为了告诉操作系统这是一个csh脚本,您需要将
#! /path/to/csh在第一行(其中/path/to/csh是系统上csh的完整路径。您可以通过发出命令which csh找出答案)。
这应该会给你你想要的行为。
编辑shell正如一些注释中所讨论的,您可能希望选择C (csh)的替代Shell。对于脚本来说,它不是最友好的。
发布于 2011-07-30 00:18:39
您有几个选项。
您可以从当前的shell中运行该脚本。如果您正在运行csh或tcsh,则语法为source testscript.csh。如果您运行的是sh、bash、ksh等,则语法为. ./testscript.sh。注意,我已经更改了文件名后缀;source或.在当前shell中运行命名文件中的命令。如果您有任何特定于shell的语法,那么除非您的交互式shell与脚本使用的shell匹配,否则这将不起作用。如果脚本非常简单(只是一系列简单的命令),这可能无关紧要。
您可以使脚本成为可执行程序。(我将重复一些其他人已经写过的东西。)添加一个"shebang“作为第一行。对于csh脚本,请使用#!/bin/csh -f。-f避免在您自己的个人启动脚本中运行命令(.cshrc等人),这节省了时间,并使其他人更有可能使用它。或者,对于sh脚本(推荐),使用#!/bin/sh (没有-f,它具有完全不同的含义)。在任何一种情况下,运行chmod +x the_script,然后运行./the_script。
当我想要执行一些中等复杂的动作时,我经常使用一个技巧。假设我想删除当前目录中的一些文件,但不是所有文件,但是标准不能用一条命令方便地表达出来。我可能会运行ls > tmp.sh,然后用我最喜欢的编辑器编辑tmp.h (我的编辑器恰好是vim)。然后,我浏览文件列表,删除所有我想单独保留的文件。完成此操作后,我可以将每个文件名替换为删除它的命令;在vim中为:%s/.*/rm -f &/。我在顶部添加了一个#!/bin/sh,保存它,chmod +x foo.sh,然后是./foo.sh。(如果某些文件名可能包含特殊字符,我可以使用:%s/.*/rm -f '&'/。)
https://stackoverflow.com/questions/6670047
复制相似问题