GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプト、メッセージをエコーし​​た後に同じ行で読む

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

また! (遅いほうがいい)

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

シバン #!/bin/sh は、歴史的な Bourne シェル (Solaris などの一部のシステムではまだ使用されていると思います)、またはおそらく POSIX で定義されている標準シェル言語のいずれかのコードを作成していることを意味します。つまり、read -pecho -n どちらも信頼できません。

標準/ポータブル ソリューションは次のとおりです。

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

(-r \ の特別な扱いを防ぎます 、 read 以降 行末にある場合、通常は行継続として受け入れます。)

スクリプトが Bash を備えたシステムで実行されることがわかっている場合は、シバンを #!/bin/bash に変更できます。 (または #!/usr/bin/env bash )そして、すべての派手な Bash 機能を使用します。 (多くのシステムには /bin/sh があります bash へのシンボリックリンク どちらの方法でも機能しますが、それに依存するのは悪い習慣であり、bash sh という名前で実行すると、実際には独自の機能の一部が無効になります .)


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

help read から :

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

Linux
  1. どのシェルインタープリターがシバンなしでスクリプトを実行しますか?

  2. コマンドライン引数をシェルスクリプトに渡す方法は?

  3. &&および||後のBashラインの継続文書化されていますか?

  1. 同じ行のカールコマンドの後にテキストをエコーし​​ますか?

  2. シェルスクリプトBashでサブストリングをチェックする方法は?

  3. ファイルを bash シェル スクリプトに含める方法

  1. コマンドライン引数をBashスクリプトに渡しますか?

  2. 変数の割り当て後に同じ行でコマンドを実行するのはシェルポータブルですか?

  3. シェルスクリプトから、特定の行を出力した後にプログラムを強制終了します