2016-12-30 14 views
-1

ディレクトリ内のファイル数を監視するために使用する次のコマンドは、必要な値を動的に表示しません。watchコマンドの予期しない動作

watch "echo \`ls -l| wc -l\`" 

次のコマンドはうまくいきます。

watch "ls -l| wc -l" 

この現象の説明は何ですか?

+0

スタックオーバーフローは、プログラミングのためのサイトです開発の質問。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 [Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306) – jww

答えて

1

watchが実行される前に、シェルがバッククックを展開するからです。あなたがset -xを使用する場合は、実際に終わるコマンドは、それは常に同じだ理由を説明している

watch "echo 42" 

を呼び出すことがわかります。

あなたは文字通りそれを渡すためにバックスラッシュで`をエスケープすることができます、すべての展開を阻害し、単一引用符を使用することにより

watch "echo \`ls -l | wc -l\`" 

以上簡単に:

watch 'echo `ls -l | wc -l`' 
+1

PS:[backticksの使用を中止](http://mywiki.wooledge.org/BashFAQ/082) ) –