當我在命令行它的工作原理上運行此:grep的內部shell腳本不工作
ls | grep -v "#$"
但是當我做ls | scriptname
和腳本里面我有:
#fileformat=unix
#!/bin/bash
grep -iv '#$'
它不工作。爲什麼?
[編輯]
用於第一線的原因進行說明here。
除此之外,即使我刪除前兩行它應該工作。我在遠程Solaris帳戶上嘗試了完全相同的功能,但確實有效。那麼是我的Fedora安裝?
當我在命令行它的工作原理上運行此:grep的內部shell腳本不工作
ls | grep -v "#$"
但是當我做ls | scriptname
和腳本里面我有:
#fileformat=unix
#!/bin/bash
grep -iv '#$'
它不工作。爲什麼?
[編輯]
用於第一線的原因進行說明here。
除此之外,即使我刪除前兩行它應該工作。我在遠程Solaris帳戶上嘗試了完全相同的功能,但確實有效。那麼是我的Fedora安裝?
散列爆炸線需要是腳本中的第一行。擺脫#fileformat=unix
。還要確保你的腳本是可執行的(chmod +x scriptname
)。這工作:
#!/bin/bash
grep -iv '#$'
我不知道發生了什麼,但它現在正在工作...感謝您的幫助 – raoulbia 2011-04-28 18:38:08
將其更改爲ls < scriptname
以便將輸出傳遞給ls。
首先你需要#!/bin/bash作爲腳本的第一行。
然後'#$'在shell參數中沒有意義。你在行尾尋找'#'嗎? (那沒問題)。但是,如果你的意思是'$#',但是$#是參數,這意味着'命令行上的參數數量'
通常,將文件列表傳送給腳本以執行操作必須完成進一步包裝。所以,一個最基本的,通用的解決方案爲您帶來可能是問題:
$cat scriptname
#!/bin/bash
while read fileTargs ; do
grep -iv "${@}" ${fileTargs} # (search targets).
done
稱爲
ls | scriptname srchTargets
我希望這有助於。
「您是否在行末搜索'#'?」是 – raoulbia 2011-04-28 18:04:09
yes agree,刪除前2行應該仍然有效,因爲你的腳本被默認shell解釋,幾乎可以肯定是bash。但是文件中的'#fileformat = unix'只能是註釋。請注意,你所包含的鏈接,他們指的是用'vi'編輯器編輯文件,確切的用法是':fileformat = unix'(注意':'char)。像':var = value'這樣的文本是vi說'設置一個vi選項',在這種情況下,fileformat = unix的意思是'only only \ n(LF)char end of line not the DOS version of \ r \ n CR,LF)。其他海報是正確的,你不希望#f ..在頂部! – shellter 2011-04-28 18:36:54