下面,我在執行shell腳本後Shell腳本,閱讀同一行呼應的消息
#!/bin/sh
echo "Enter [y/n] : "
read opt
它的輸出是
Enter [y/n] :
Y
我想要的變量應該在同一個閱讀像下面的線
Enter [y/n] : Y
應該很簡單我猜,但我是新來的bash腳本。
下面,我在執行shell腳本後Shell腳本,閱讀同一行呼應的消息
#!/bin/sh
echo "Enter [y/n] : "
read opt
它的輸出是
Enter [y/n] :
Y
我想要的變量應該在同一個閱讀像下面的線
Enter [y/n] : Y
應該很簡單我猜,但我是新來的bash腳本。
的家當#!/bin/sh
意味着你編寫代碼或者歷史的Bourne shell(在某些系統如Solaris,我認爲還是找到),或更可能的是,標準的shell語言所界定POSIX。這意味着read -p
和echo -n
都不可靠。
標準/便攜式解決方案是:
printf 'Enter [y/n] : '
read -r opt
(該-r
防止\
的特殊處理,因爲read
通常接受作爲當它是在一個行的末尾行繼續。)
如果您知道您的腳本將在具有Bash的系統上運行,您可以將shebang更改爲#!/bin/bash
(或#!/usr/bin/env bash
)並使用所有奇特的Bash功能。 (許多系統/bin/sh
符號鏈接到bash
所以它仍然可以正常工作,但依靠這是不好的做法,並在名稱sh
下執行bash
實際上是關閉了一些自己的特點。)
這是一個非常明確的解釋。我在RHEL 5.5順便說一句。 – user1263746 2012-03-15 13:33:27
解決方案:read -p "Enter [y/n] : " opt
從help read
:
-p prompt output the string PROMPT without a trailing newline before
attempting to read
完美地工作。感謝有關-p開關的解釋。 – user1263746 2012-03-15 13:16:10
echo -n "Enter [y/n] : " ; read opt
OR! (後來是更好)
read -p "[y/n]: " opt
很好,謝謝! – user1263746 2012-03-15 13:16:24
@Aaron 感謝格式化帖子。這是我的第一篇文章。我會確保我的其他帖子格式良好。 – user1263746 2012-03-15 13:10:24
不客氣:-) – 2012-03-15 13:12:29