繁体   English   中英

tcsh脚本-将不使用cygwin输出简单的ls -l命令

[英]tcsh script - Will not output simple ls -l command using cygwin

我想检查目录A中的文件是否与目录B中的文件匹配,并且这些匹配的文件没有被修改/更改。

我对Windows十分熟悉,因此对这种新的编程环境非常陌生。 该任务是学校项目的一部分,但我试图使用cygwin和bash(?)在Windows上运行tcsh脚本。 但是,我在脚本中指定了tcsh环境。

这个简单的脚本:

#!/usr/bin/tcsh
echo Hello world;

set listing=`ls -l`

echo $listing

给我以下输出:

Shawn@Shawn-PC /cygdrive/c/Users/Shawn/Desktop
$ ./lab3.sh
Hello world
Unknown user: $372.

但是,我能够直接在命令行中运行“ ls -l”命令,并且它返回适当的结果,因此我不知道为什么它不能在脚本中执行我的“ ls -l”命令。 我不知道脚本中的tcsh语法是否有问题以及为什么它会返回错误消息“未知用户:#372”。

您可能有一个文件或目录,其名称类似于~372 ,或者包含该文件或目录作为其名称的一部分。

如果您输入

echo ~372

在shell提示符下,shell将努力扩大~372用户的主目录与名称372 几乎可以肯定没有这样的用户-错误消息。

您的命令:

set listing=`ls -l`

反正不太可能有用。 ls -l的输出是面向行的,带有对齐的列,将被合并为一行文本,其中多个空格由单个空格代替。 这将是一团糟,很难阅读。 (也许重点是证明这一点。)

您可避免在错误~372通过增加周围的反引号双引号:

set listing="`ls -l`"

但是现在字符串$listing包含了麻烦的~372 ,如果您尝试echo它,您将遇到同样的问题。 $listing将扩展为字符串,并且echo将尝试扩展其中包含的~372

因此,您需要) to the echo`命令中添加引号(或:q后缀) to the

这是在系统上使用tcsh的结果:

% touch foo bar '~372'
% ls -l
total 0
-rw-r--r-- 1 kst kst 0 Sep 19 14:06 bar
-rw-r--r-- 1 kst kst 0 Sep 19 14:06 foo
-rw-r--r-- 1 kst kst 0 Sep 19 14:06 ~372
% set listing = `ls -l`
Unknown user: 372.
% set listing = "`ls -l`"
% echo $listing
Unknown user: 372.
% echo "$listing"
total 0 -rw-r--r-- 1 kst kst 0 Sep 19 14:06 bar -rw-r--r-- 1 kst kst 0 Sep 19 14:06 foo -rw-r--r-- 1 kst kst 0 Sep 19 14:06 ~372
%

这并不是一件特别有用的事情,但这就是方法。

请注意,如果您使用的是bash,请执行以下操作:

listing="`ls -l`"
echo "$listing"

将保留多行格式。

强制性链接: http ://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot

如果您只需要将其打印到终端,那么这就是您所需要的。

#!/usr/bin/env tcsh

echo Hello world

ls -l

如果需要将其另存为数组或其他内容,则将其输出到文本文件然后逐行读取为数组会更容易。 (间距弄乱了我直接去做)。

#!/usr/bin/env tcsh

echo Hello world

ls -l > output.txt

如果这是您需要的内容,请阅读将文本文件作为数组导入的内容。

另外,如果您有选择的话,这在bash中会容易得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM