我想創建一個腳本,它將在列表中的每個文件上運行一個程序。我一直在努力做到這一點使用.csh文件(我不知道這是否是最好的方式),我開始爲世界你好簡單的東西在Linux上的腳本
echo "hello world"
的問題是,我不能執行此腳本,或驗證它是否正常工作。 (我試圖做./testscript.csh這顯然是錯誤的)。我一直無法找到真正解釋如何運行C腳本的任何內容,而且我猜測還有更好的方法來做到這一點。爲了實現這個目標,我需要改變什麼?
我想創建一個腳本,它將在列表中的每個文件上運行一個程序。我一直在努力做到這一點使用.csh文件(我不知道這是否是最好的方式),我開始爲世界你好簡單的東西在Linux上的腳本
echo "hello world"
的問題是,我不能執行此腳本,或驗證它是否正常工作。 (我試圖做./testscript.csh這顯然是錯誤的)。我一直無法找到真正解釋如何運行C腳本的任何內容,而且我猜測還有更好的方法來做到這一點。爲了實現這個目標,我需要改變什麼?
您需要將其標記爲可執行文件; Unix不會基於擴展來任意執行任何操作。
chmod +x testscript.csh
另外,我強烈建議using sh
or bash
instead of csh
,否則你很快就會了解csh
的循環和控制流結構的特質(有些東西只有在他們裏面工作,如果做了一個特別的方式,尤其是與單行版本的東西都是非常有限)。
chmod' works,但僅僅是因爲該文件是*也是一個有效的Bourne shell腳本。 –
你可以使用./testscript.csh。但是,您將需要讓第一個可執行文件:(!誰曾文件所擁有 - 在這種情況下應該是你自己)
chmod u+x testscript.csh
這意味着設置testscript有用戶執行權限
另外要告訴操作系統,這是一個csh的腳本,你需要把
#! /path/to/csh
在第一行(其中/path/to/csh
是CSH系統上的完整路徑,你可以發現,從發出命令which csh
) 。
這應該給你你想要的behvaiour。
編輯正如在一些評論中所討論的,您可能想要爲C Shell(csh)選擇一個替代shell。這不是腳本編寫中最友好的一個。
夠公平的,給你+1。 –
+1。順便說一下'#!'被稱爲shebang - http://en.wikipedia.org/wiki/Shebang_%28Unix%29 – 2011-07-12 20:00:35
你有幾種選擇。
您可以從當前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中,01。我在頂部保存一個#!/bin/sh
,chmod +x foo.sh
,然後./foo.sh
。 (如果某些文件名可能有特殊字符,我可以使用:%s/.*/rm -f '&'/
。)
http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ –