2016-12-23 1 views
0

私は、実行するたびにトラックパッドの動作を切り替えるbashスクリプトを作成しようとしています。それは以下の通りです。bashスクリプトで変数から読み込むときに引数が多すぎます

#!/bin/bash 

zero=0; 

if [ ! -f "/tmp/touchpadON.dat" ]; then 
    T=0         
    xinput disable 12 
    echo no file found 
else 
    T='cat /tmp/touchpadON.dat' 
    if [ $T -eq $zero ] # ERROR here, too many arguments. 
    then 
    T=1 
    xinput disable 12 
    echo diabling trackpad 

    else 
    T=0 
    xinput enable 12 
    echo enabling trackpad 
    fi 

fi 

echo $T 

echo "${T}" > /tmp/touchpadON.dat 

このスクリプトを実行しようとすると、11行目でエラーが多すぎるというエラーが表示されます。これをどうやって解決するのですか?

+0

/tmp/touchpadON.datには何がありますか?あなたはそこから1つ以上の言葉を得ているに違いない。それが問題の原因となっている。 – codeforester

+0

T = $(cat file.dat)を試してください – fedepad

+1

ここにはたくさんのバグがあります。 http://shellcheck.net/はあなたのためにそれらの多くを識別します - StackOverflowでここに質問をする前に見つけたすべてのものを修正する習慣を作ってください。 –

答えて

0

変更

if [ $T -eq $zero ] 

if [ $T -eq "$zero" ] 

としようとします。


あなたはより良いこの方法あなたのif文を書くことができます。

if [[ $T == $zero ]] 

Conditional Constructs上のBashのマニュアルを参照してください。

+1

'[" $ T "-eq" $ zero "]'と '[[$ T == $ zero]]'は非常に異なるものです。前者は数値比較、後者は文字列比較です。 '000'は' -eq'から '0'になりますが、' = 'から' 0'にはなりません。 –

+0

( '=='は '[[]]'の中で有効ですが、指のメモリに '=='を持つ人は '[]'の中で使う傾向があります。 t *が有効であることが保証されている](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html)、例では一貫して '='を使うことを提案する傾向があります)。 –

1

Try T=$(cat file.dat)
ファイルの内容ではなく、コマンドだけのあなたのやり方。

+0

問題が解決しないことがあります。 – codeforester

+1

私は試していないかもしれません;)。少なくとも彼が今やっているように文字列を印刷するのではなく、読みたいファイルの中にあると思う価値があるでしょう。彼はチェックする;)コメントをありがとう、それを指摘する! – fedepad

+0

私は今それを得る。彼のコードはバッククォートの代わりにシングルクォートを持っています。 file.datが1つ以上の単語にならない限り、あなたの解決策は機能します。 – codeforester

関連する問題