2017-02-28 2 views
0

私はBashスクリプトを学習しています。bashスクリプトでsleepとclearコマンドを使用する

私のスクリプトの中で、私はclearsleep 1を試しました。

sleep 1は期待通りに実行されますが、clearcommand not foundエラーで実行されます。

なぜですか?

クリアとスリープ1はスクリプト内のバックスラッシュで囲まれています。スタックオーバーフローは、これらのシンボルを使用してコードを示しています。エスケープシンボルを使用してここに入力する方法はわかりません。

+0

コンソールから「クリア」を実行し、出力を貼り付けます。また、あなたの全体のスクリプトを貼り付けてください...私はあなたをかなり素早く助けることができるはずです。 –

+0

スタックオーバーフローにコードを入力するには、改行の後にコードサンプルの前に4つのスペースを入れます – Aserre

答えて

0

逆引用符は、文字列をコードとして表示する必要があることを示すスタックオーバーフローで使用されます。あなたの実際のコードは、バッククォートを必要としない:

あなたはUnixのコードでバッククォートを見てきました
echo "Hello from commandline" 
sleep 3 
echo "After sleeping, will try to use clear in 4 seconds" 
sleep 1 
echo "will try to use clear in 3 seconds" 
sleep 1 
echo "will try to use clear in 2 seconds" 
sleep 1 
echo "will try to use clear in 1 seconds" 
sleep 1 
clear 

は、コマンドの実行中に別のコマンドを呼び出すには昔ながらの方法を参照してください。

echo "Current time is `date`, so hurry!" 

は、今、私たちはそれが1つの文字この単純なケースではより多くの、より多くのものをネストするときはるかに優れています

echo "Current time is $(date), so hurry!" 

としてこれを書きます。私も、私はあなたがこれをしようとしていると仮定し、バッククォート

echo "Previous command returned $(echo "Current time is $(date), so hurry!")." 
0

で次の例を記述しようとはしません。

$(clear) 

またはこの

`clear` 

これらは、発現コマンド置換の2つの方法があり。最初のものは読みやすく、好まれるはずですが、同じことをします。

解決策は単純にこれを使用することです:

clear 

さて、あなたはこのエラーを得ている理由は、ここに長い説明で理解することに興味を持っている場合。

コマンド置換は、標準出力(標準エラー)ではなく標準出力(ファイル記述子1)の出力をより正確に把握し、出力を文字列として出力しますコマンドの一部として使用されていたかのように、コマンドの一部として使用されました。(それ以上の拡張は必要ありません)

clearコマンドには、端末画面がクリアされる特殊な出力があります。しかし、clearをバッククォートで囲むことによって、この特殊な出力は端末に送信されず(端末はクリアされません)、代わりにコマンド置換によって取得されます。そして、この特別な出力はコマンドラインで入力されたかのように提供され、その行の最初の(そして唯一の)ものなので、シェルはその特殊文字と同じ名前のコマンドを見つけようとします。それが見つからない、そしてそれはあなたが "コマンドが見つかりません"というエラーを得る場所です。によって捕獲されていない、出力は記述子2(標準誤差)をファイルにリダイレクトされるので、それはエラーをトリガ画面をクリアし、しません

$(clear >&2) 

楽しみのためだけに、これを試してくださいコマンドの置換は実際に端末に送られ(クリアされます)、他の出力はないので、コマンド置換は空文字列になります.Bashは何もしない要求として解釈します(Bashはコマンドを見つけようとしません長さゼロの名前)。

このエラーが発生した理由を理解するのに役立ちます。

関連する問題