2012-03-15 48 views
24

下面,我在執行shell腳本後Shell腳本,閱讀同一行呼應的消息

#!/bin/sh 

echo "Enter [y/n] : " 
read opt 

它的輸出是

Enter [y/n] : 
Y 

我想要的變量應該在同一個閱讀像下面的線

Enter [y/n] : Y 

應該很簡單我猜,但我是新來的bash腳本。

+0

@Aaron 感謝格式化帖子。這是我的第一篇文章。我會確保我的其他帖子格式良好。 – user1263746 2012-03-15 13:10:24

+0

不客氣:-) – 2012-03-15 13:12:29

回答

26

的家當#!/bin/sh意味着你編寫代碼或者歷史的Bourne shell(在某些系統如Solaris,我認爲還是找到),或更可能的是,標準的shell語言所界定POSIX。這意味着read -pecho -n都不可靠。

標準/便攜式解決方案是:

printf 'Enter [y/n] : ' 
read -r opt 

(該-r防止\的特殊處理,因爲read通常接受作爲當它是在一個行的末尾行繼續。)

如果您知道您的腳本將在具有Bash的系統上運行,您可以將shebang更改爲#!/bin/bash(或#!/usr/bin/env bash)並使用所有奇特的Bash功能。 (許多系統/bin/sh符號鏈接到bash所以它仍然可以正常工作,但依靠這是不好的做法,並在名稱sh下執行bash實際上是關閉了一些自己的特點。)

+1

這是一個非常明確的解釋。我在RHEL 5.5順便說一句。 – user1263746 2012-03-15 13:33:27

29

解決方案:read -p "Enter [y/n] : " opt

help read

-p prompt output the string PROMPT without a trailing newline before 
     attempting to read 
+0

完美地工作。感謝有關-p開關的解釋。 – user1263746 2012-03-15 13:16:10

6
echo -n "Enter [y/n] : " ; read opt 

OR! (後來是更好)

read -p "[y/n]: " opt 
+0

很好,謝謝! – user1263746 2012-03-15 13:16:24