2015-06-21 68 views
-2

我有一個encrypt()功能是這樣的:重定向VS管 - 爲什麼它的工作原理和爲什麼它不

encrypt -a aes -k key **-i input.file** -o output.file 

內搭在1個輸入文件和輸出1文件也是如此。

通過使用管:

echo "abc" | encrypt -a aes -k key -o output.file 

Q1)如何在encrypt()功能知道或OS知道輸出爲管|是假設是用於加密函數輸入(這樣我沒不需要指定「-i input.file」參數)

Q2爲什麼重定向在這種情況下起作用? echo「abc」> encrypt -a aes -k key -o output.file

回答

2

當您使用管道時,不涉及傳統文件。當你調用

echo "abc" | encrypt -a aes -k key -o output.file 

encrypt程序不打開文件可言,相反,它讀取其標準輸入。標準輸入是您在調用它時在命令行上設置的任何內容。標準輸入可以是一個管道,就像你的例子。如果您使用的輸入重定向,標準輸入可以是文件:

encrypt -a aes -k key -o output.file < otherinput.file 

最後,如果你不使用任何管道或輸入重定向可言,也就是說,如果你調用

encrypt -a aes -k key -o output.file 

然後程序將從鍵盤讀取encrypt程序。

您的第二個問題Q2沒有意義。您將最終創建一個名爲「encrypt」的輸出文件,並且根本不會運行encrypt程序。如果你想使用輸出重定向來控制,其中encrypt程序的輸出的話,你可以使用

encrypt -a aes -k key -i input.file > output.file 

echo "abc" | encrypt -a aes -k key > output.file 
+0

你能解釋爲什麼echo「abc」>實際上並沒有提供「abc」作爲加密過程的輸入。但仍然回顯「abc」> file.txt將「abc」放入file.txt中。 – Noob

+0

@Noob'echo「abc」'將'abc \ n'寫入'stdout'。因爲您使用重定向操作符將'stdout'重定向到'file.txt',所以實際上是將'abc \ n'寫入一個名爲'file.txt'的文件中。通常,echo「X」> Y'會將'X \ n'寫入文件'Y'。如果你使用'echo'abc「> encrypt ...',你可以將'abc \ n'寫入一個名爲'encrypt'的文件中。您不執行encrypt命令。 –

+0

當你說'echo abc |加密'你正在將輸出傳送到程序'encrypt'中。當你說'echo abc> encrypt'時,你將輸出重定向到一個名爲「encrypt」的文件中。 '|'操作符管道化爲程序。 '>'操作符重定向到文件。你可能會有一個誤解,那就是Unix/Linux中的命令名是特殊的 - 它們不是。當你說'echo abc> encrypt'時,shell不會**注意到「encrypt」也是一個命令的名字。它只是查找'>'後面的單詞並通過該名稱創建輸出文件。 –

0

當你鍵入echo abc | encrypt ...,外殼讀取整個字符串並解析它。它執行echo,其標準輸入設置爲當前shell的stdin,並將其stdout設置爲新創建管道的寫入結束。它還會複製encrypt,並將其stdin設置爲該管道的讀取端,並將其stdout設置爲shell的stdout。 (請注意,分配echo的標準輸入是無操作,實際上沒有任何操作,因爲該流只是從shell繼承而來,它也被echo忽略,如果這樣會造成混淆,請忽略此括號聲明。)操作系統只有在每個進程的內部數據結構跟蹤打開的文件描述符的意義上,才瞭解這些關聯。換句話說,shell正在完成所有的工作。

解決第二個問題:「爲什麼重定向在這種情況下起作用(原文如此)?」,我想知道你說的是什麼意思。echo "abc" > encrypt -a aes -k key -o output.fileecho abc -a aes -k key -o output.file > encrypt完全相同,因此可以預期echo的輸出將寫入名爲encrypt的文件,但encrypt命令不會執行。

+0

您好威廉姆斯,你是否能夠解釋爲什麼使用重定向不起作用? – Noob

+1

小挑逗:在大多數shell中 - 包含bash - echo是一個shell內建的,所以沒有'echo'分支,儘管很多系統也有一個'echo'二進制文件,其工作原理類似(大概是爲了使其他shell那裏'回聲'不是內置的,這是罕見的)。 –

+0

@ william-pursell我的意思是爲什麼echo「abc」>加密-a aes -k key -o output.file將不起作用 – Noob

相關問題