簡體   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