主要問題是shell中的每一行都需要以\n
結尾才能執行,即使是最後一行。您可以將\n
添加到"echo 'hello'"
字符串的末尾。這可能是csh
中的一個錯誤,因爲bash
和朋友沒有這個問題,但是如果你想使用csh
,你必須適應它。
當你在vim中保存一個文本文件時,如果沒有一個開頭的話,它會在文件中添加一個尾隨換行符。您可以通過預先保存文件的副本,並運行diff
,看看有什麼變化VIM驗證這一點:
$ cat blah-grabme-12.csh
#!/bin/csh -f
echo 'hello'$ cp blah-grabme-12.csh blah-grabme-12.csh.orig
$ vim blah-grabme-12.csh
┌────────────────────────────────────────────────────────────────────────────────┐
│#!/bin/csh -f │
│echo 'hello' │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│:wq❚ │
└────────────────────────────────────────────────────────────────────────────────┘
$ diff -u blah-grabme-12.csh.orig blah-grabme-12.csh.orig
--- blah-grabme-12.csh.orig
+++ blah-grabme-12.csh
@@ -1,2 +1,2 @@
#!/bin/csh -f
-echo 'hello'
\ No newline at end of file
+echo 'hello'
您可以關閉VIM的這種行爲在你~/.vimrc
如果你願意的話。請參閱:help 'eol'
vim幫助。
另一個潛在的問題是,如果filename
是一個非空路徑,即system(filename)
只會工作,具有在/
它,或者如果.
在系統$PATH
。
此外,通過使用os.open()
而不是open()
,您可以在文件創建時設置文件權限。在這裏它可能沒有太大區別,但在許多情況下,創建文件然後更改其權限會導致security vulnerability。 This stackoverflow question顯示瞭如何做到這一點。
全部放在一起,你會得到這樣的事情:
import os
import os.path
grabmeName = 'blah-grabme-12.csh'
with os.fdopen(os.open(grabmeName, os.O_WRONLY | os.O_CREAT, 0700), 'w') as f:
f.write("#!/bin/csh -f\n")
f.write("echo 'hello'\n")
os.system(os.path.abspath(grabmeName))
你似乎有一個壓痕錯誤。你能否檢查你的代碼,並確保你在這裏的縮進*完全像你的代碼一樣?我至少可以想到一種情況,可能會導致您看到的行爲取決於縮進。 。 。 – mgilson
謝謝,這是一個錯字。 Editted。 – user1824335
爲什麼打開'a'ppend而不是'w'rite文件? – sotapme