2010-09-27 134 views
51

是否有可能讓bash腳本自動處理通常會以默認操作呈現給用戶的提示?目前,我正在使用bash腳本來調用一個內部工具,它會向用戶顯示提示(提示是/否)完成操作,但是我正在編寫的腳本需要完全「不干涉」,所以我需要一種方法將Y|N發送到提示符以允許程序繼續執行。這可能嗎?bash腳本回答交互式提示

+0

這不是「自動完成」......像@unwind說的那樣,它是「自動化」 – benzaita 2012-06-26 12:55:37

+1

使用'yes'來執行此操作的示例:http://unix.stackexchange.com/questions/47344/the-yes-命令#comment65866_47344 – Droogans 2015-09-22 15:01:27

回答

39

這不是「自動完成」,這是自動化。這些東西的一個通用工具叫做Expect

您可能也會從yes只輸入管道輸入。

+1

不幸的是,我不能使用期望值,因爲它們對系統運行時有嚴格的空間要求,所以我不能添加額外的軟件包,但是管道「yes」做了這個竅門,幸運的是所有的提示只需要一個'y 「無論如何。謝謝。 – tj111 2010-09-27 14:32:26

+0

但是'是|命令「可能無法正常工作。如果僅僅是爲了安裝目的,那麼我使用'-y'是一個更好的選擇。 – 2017-03-14 10:13:54

96

簡單

echo "Y Y N N Y N Y Y N" | ./your_script 

這允許你通過「Y」或「N」到腳本的任何序列。

+0

如果我需要發送任何'N',我會用這個方法,但是我只需要Y,所以我用'yes'去。太糟糕了,我不能接受兩個答案,因爲它們都是正確的。 – tj111 2010-09-27 14:43:05

+2

;)那麼如果你需要發送一些'N',你現在有一個很好的方法來做到這一點。 – 2010-09-27 14:46:01

+0

這種解決方法對於我懶惰的CLI行爲而言非常出色。謝謝! – mbb 2014-08-06 19:29:32

9

我發現發送輸入的最佳方式是使用cat和一個文本文件來傳遞你需要的任何輸入。

cat "input.txt" | ./Script.sh 
7

如果你只有Ÿ派:

$> yes Y |./your_script 

如果你只有有N個送:

$> yes N |./yout_script 
4

在我的情況,我需要回答無Y或N的一些問題但帶有文字或空白。我發現在我的情況下做到這一點的最好方法是創建一個shellscript文件。在我的情況下,我稱它爲autocomplete.sh

我需要回答一些教條模式導出器的問題,所以我的文件看起來像這樣。

- 這僅是一個例子 -

php vendor/bin/mysql-workbench-schema-export mysqlworkbenchfile.mwb ./doctrine << EOF 
`#Export to Doctrine Annotation Format`          1 
`#Would you like to change the setup configuration before exporting`  y 
`#Log to console`               y 
`#Log file`                 testing.log 
`#Filename [%entity%.%extension%]` 
`#Indentation [4]` 
`#Use tabs [no]` 
`#Eol delimeter (win, unix) [win]` 
`#Backup existing file [yes]` 
`#Add generator info as comment [yes]` 
`#Skip plural name checking [no]` 
`#Use logged storage [no]` 
`#Sort tables and views [yes]` 
`#Export only table categorized []` 
`#Enhance many to many detection [yes]` 
`#Skip many to many tables [yes]` 
`#Bundle namespace []` 
`#Entity namespace []` 
`#Repository namespace []` 
`#Use automatic repository [yes]` 
`#Skip column with relation [no]` 
`#Related var name format [%name%%related%]` 
`#Nullable attribute (auto, always) [auto]` 
`#Generated value strategy (auto, identity, sequence, table, none) [auto]` 
`#Default cascade (persist, remove, detach, merge, all, refresh,) [no]` 
`#Use annotation prefix [ORM\]` 
`#Skip getter and setter [no]` 
`#Generate entity serialization [yes]` 
`#Generate extendable entity [no]`           y 
`#Quote identifier strategy (auto, always, none) [auto]` 
`#Extends class []` 
`#Property typehint [no]` 
EOF 

我喜歡這種策略,你可以發表評論你的答案是什麼,以及使用EOF一個空行的事情就是這樣(默認回答)。通過這種出口商工具有自己的JSON對應方式回答這些問題的方式,但我做了這個=)。

運行腳本只需在您想要的目錄中並在終端中運行'sh autocomplete.sh'

總之,通過使用< < EOL & EOF結合返回行你能回答必要提示的每一個問題。 每一個新行都是一個新的答案。

我的例子只是展示瞭如何使用`character來完成評論,這樣你就可以記住每一步是什麼。

請注意,這種方法的另一個優點是你可以用更多的答案,然後只是Y或N ...其實你可以用空格回答!

希望這可以幫助別人。

+1

請讓我知道爲什麼downvote,這花了很長時間才發現這是答案(和我的情況只是答案)。我把它放在這裏與社區分享,它應該停留在提問者身上。 「是否有可能讓bash腳本自動處理通常會以默認操作呈現給用戶的提示?」,是的,使用我上面提到的方法是一種方法。 – 2017-04-29 00:30:56