簡體   English   中英

Korn Shell Scripting標頭錯誤

[英]Korn Shell Scripting header error

我剛找到一份工作,其中80%的工作都在Unix環境中。 我正在學習如何shell腳本。 我真的很難嘗試在我的練習腳本上設置標題。 如果您看一下我的第一個腳本,它將接受標頭。 我在新腳本上再次創建了相同的標頭,這給我帶來了錯誤的解釋器。 兩者都是使用命令chmod u+x nameOfScript創建的可執行文件。 這兩個腳本位於同一位置。 所以我真的不明白發生了什么。 看一看:

parallels@ubuntu:~$ cat firstApp.ksh

#!usr/bin/ksh

# this prints the first line.

echo "Hi this is my first app, which me luck!"
echo "i hope this works again"    
#this is a comment as well

現在看看我的其他腳本不起作用,相同的標題

parallels@ubuntu:~$ cat thirdApp.ksh
#!usr/bin/ksh

#print this

echo "I'm gonna try this again"

當我運行此腳本時,它將運行...

parallels@ubuntu:~$ ./firstApp.ksh
Hi this is my first app, which me luck!
i hope this works again

但是當我運行它失敗

parallels@ubuntu:~$ ./thirdApp.ksh
bash: ./thirdApp.ksh: usr/bin/ksh: bad interpreter: No such file or directory

我正在兩個腳本上完全復制標題,當我尋找Korn shell標題時,我得到了

parallels@ubuntu:~$ which ksh
/usr/bin/ksh
parallels@ubuntu:~$ 

請讓我了解我在做什么錯。 Unix對我來說仍然很新。

該命令僅在根目錄中運行時有效。 你需要:

#!/usr/bin/ksh

使用完整的絕對路徑名(以/開頭),而不是使用以下相對路徑名:

#!usr/bin/ksh

請注意,相關性,shebang( #! )必須是文件中的前兩個字符。 前導空白行或#之前的行中的空白使其無關緊要; 內核看起來是否前兩個字符是#! 如果不是,則忽略shebang線。

在Unix中, #! 位於腳本第一行第一列的叫做shebang 這是允許Unix執行程序找出您要用來處理腳本的程序的機制。 如果沒有shebang ,您的腳本將使用您的默認shell執行。

如果您的shell腳本中沒有shebang,但是用戶的默認shell是Kornshell,一切都會好起來的。 如果用戶的默認外殼是C-shell,則您的腳本將無法運行。 因此,您應該始終使用shebang。

shebang的問題在於它不使用您的$PATH查找程序。 相反,您必須具有硬編碼路徑。 如果你有:

#! usr/bin/ksh

而且,您位於/home/opj目錄中,它將查找/home/opj/usr/bin/ksh 這是無法正常工作的腳本的問題。 您需要以/開頭

#! /usr/bin/ksh

也就是說,當然,假設您的Kornshell應用程序在/usr/bin/ksh ,而不在/bin/ksh 大多數外殼程序位於/bin目錄下。 檢查以確保它是/bin/ksh/usr/bin/ksh

解決此限制的一種方法是依賴env ,它幾乎總是在/usr/bin 使用envenv將沿着路徑搜索程序,然后將其用作腳本的解釋器:

#! /usr/bin/env perl

無論是在/bin/perl/usr/bin/perl還是/usr/local/bin/perl下,我的腳本都可以找到Perl解釋器。 實際上, Perlbrew嚴重依賴此行為。

缺點是您不能強迫某人使用您的解釋器的特定版本。 如果我有#! /bin/ksh #! /bin/ksh ,這就是我的腳本將要使用的。

還有一件事。 為什么要使用Kornshell而不是BASH。 BASH和Kornshell在語法上有95%相同,但是BASH現在更加普及了。 我之所以使用Kornshell,是因為這是我在20世紀最后二十年學到的。 我什至在Mac上安裝了Kornshell就是因為我喜歡Bash中沒有的功能。

但是,我建議新用戶學習BASH只是因為他們遇到問題時,就會有更多的資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM