2014-05-16 19 views
2

我有一個簡單的cli將時間戳轉換爲人類可讀的日期時間。出於某種原因,當我嘗試調用它時,我調用了imagemagick中的import命令。一行一行很重要嗎?

> ts 1400029200000 
Version: ImageMagick 6.8.7-7 Q16 x86_64 2013-11-27 http://www.imagemagick.org 
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC 
Features: DPC Modules 
Delegates: bzlib freetype jng jpeg ltdl png xml zlib 

Usage: import [options ...] [ file ] 

下面是我的腳本

1 
2 #!/usr/bin/env python 
3 
4 import argparse 
5 from datetime import datetime 
6 
... 
12 
16  time = args.time 
... 
22  print(datetime.utcfromtimestamp(time)) 
... 
25 
26 if __name__ == '__main__': 
27  main() 
28 

當我移動到認領的第一行,我得到正確的結果

> ts 1400029200000 
2014-05-14 01:00:00  

是怎麼回事?

+0

我相信如此。它告訴操作系統如何處理腳本,因此需要在第一行中指定 - 否則在調用腳本時必須指定shell。 –

回答

7

'shebang'必須是第一行,因爲它由內核解釋,它在可執行文件的開始處查看兩個字節。

如果它們是#!,則該行的其餘部分被解釋爲要運行的代碼並且該腳本文件可用於該程序。此刻你有換行符和,然後這行中的字符。

+0

我明白了。那麼如果沒有shebang行,腳本默認是作爲bash腳本執行的嗎?如果是這樣,有沒有辦法改變默認值? –

+0

@KevinSLin恐怕我不知道,我不是一個活躍的Linux用戶。你應該提出一個不同的問題來獲得一些專業知識。 –

+0

@KevinSLin如果沒有shebang行(在第一行),那麼它確實由你用來運行命令的任何shell執行 - 在你的情況下是'bash'。 ['import'](http://www.imagemagick.org/script/import.php)是'imagemagick'的一部分。 – ubomb