我有一個腳本的第一行內容的字符串的名稱,如慶典:找到解釋
#!/bin/bash
,但它可以是任何東西,如
#!/path/to/another/interpret -some args -another arg
哪有我通過省略路徑和參數來提取解釋器的名稱 - 「bash」,「解釋」?
我雖然關於找到第一個空白區分路徑的參數。
你能幫忙嗎?
我有一個腳本的第一行內容的字符串的名稱,如慶典:找到解釋
#!/bin/bash
,但它可以是任何東西,如
#!/path/to/another/interpret -some args -another arg
哪有我通過省略路徑和參數來提取解釋器的名稱 - 「bash」,「解釋」?
我雖然關於找到第一個空白區分路徑的參數。
你能幫忙嗎?
我不認爲你可以在shebang中使用空格。如果你不能,你可以找到解釋名字是這樣的:
interpreter=`cat test.sh | head -n 1 | cut -d' ' -f 1`
basename $interpreter
編輯: 縮短版本:
interpreter=$(basename $(sed '2q;s/^#!//;s/ .*//' test.sh))
$ basename '#!/path/to/another/interpret -some args -another arg'|awk '{ print $1}'
interpret
set -- $(head -1 scriptname)
case $1 in
"#!")
# whitespace after the #!, the interpreter is the 2nd word
interp=$2
;;
"#!"*)
# no whitespace, strip the first 2 chars from the 1st word
interp=${1#??}
;;
*)
echo no shebang at all
exit
;;
esac
interp=$(basename "$interp")
你說的 '提取' 是什麼意思?你在哪裏以及如何獲得這些信息?腳本里面? – Bernhard 2012-03-25 09:54:52
你確定一個shebang中的路徑可以包含空白嗎? – user123444555621 2012-03-25 09:55:04
它不像我「知道如何去做」,但是,你可以做的是使用〜some〜命令將「/」字符串作爲分隔符分隔開,並使用結果字符串數組的最後一個值...我猜測sed或awk或grep(和正則表達式)可以幫助你。例如grep -Po「/ [a-z,A-Z] {0-30} $」可以工作,但我不確定。基本上應該匹配「/ bash」,「/ sh」,但不是「/ some」。希望這個〜kinna〜有幫助 – 2012-03-25 09:58:14