我正在尝试从命令行运行我编写的 Perl 脚本。代码如下:
#!/usr/bin/perl
#open file
open(READFILE,"<prune.txt") || die "Couldn't open file";
#read line
while (<READFILE>)
{
#seperate line into pieces
$txtline = $_;
$txtline =~ m/(\d+)\t([\w\s]+)/i;
#rename file
print("Rename $2 to $1.\n");
#loop
}
close (READFILE);
当我在终端中运行它时出现错误:#open: bad interpreter: No such file or directory
。
答案1
使用 vi 将 Perl 脚本(比如perl_script.pl
)转换为 UNIX 文件格式 ( :set ff=unix
),如下所示:
vi perl_script.pl
现在在 中vi
,将文件格式更改为 UNIX,保存文件,然后退出,如下所示:
:set ff=unix
:wq
现在像以前一样运行您的脚本。
问题很可能在于该文件被创建或转换为 UNIX 格式以外的其他格式,也许是 DOS(:set ff=dos
在vi
)。
至少在我的 Ubuntu Linux 12.04 LRS 安装中,旧的工具dos2unix
和unix2dos
似乎并未默认安装。如果它们随时可用,我就会建议这样做 - 因此上述技巧可以帮助您入门。由于它们目前不可用,因此这里有一个非常简单的方法来恢复它们:
$ sudo apt-get install tofrodos
$ sudo ln -s /usr/bin/fromdos /usr/bin/dos2unix
$ sudo ln -s /usr/bin/todos /usr/bin/unix2dos
现在,要了解如何使用dos2unix
,请执行man fromdos
,以及要了解如何使用unix2dos
,请执行man todos
。
将以下内容添加到您的一个 shell 启动文件中,以编写您自己的代码dos2unx
,unix2dos
即您的.bashrc
文件:
dos2unix(){
tr -d '\r' < "$1" > t
mv -f t "$1"
}
dos2unix file
unix2dos(){
sed -i 's/$/\r/' "$1"
}
unix2dos file
因为后者编码更容易,所以我为我的 OSX 服务器做了这件事,而不是弄清楚要找到哪个包并移植到 OSX。
答案2
您是否想在文件名中添加“<”字符?几乎所有此类错误都与尝试访问名称中有拼写错误的文件有关。