4

私が持っている一般的な問題を単純化するために、.bashrc の単純な関数を作成しようとしています。

$ sudo apt-get install nltk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package nltk
$ apt-cache search nltk
python-nltk - Python libraries for natural language processing
$ sudo apt-get install python-nltk

だから私はこれを書いた:

function sagi(){
    sudo apt-get install $1 || apt-cache search $1
}

しかし、何をしても、apt-get install要求したパッケージが見つからないためにパーツが実行されてエラーが発生した後、関数は完全に終了します。私もこれをやってみました:

function sagi(){
    sudo apt-get install $1
    echo $1
}

繰り返しますが、失敗した apt-get の実行後は何もありません。奇妙なことに、私が実行すると:

$ sudo apt-get install nltk || apt-cache search nltk

(bashプロンプトで)すべてが期待どおりに機能します。私は何を間違っていますか?


編集:関数は私の.bashrcファイルの最後にあり、上にその全体が示されています。set確認したところ、.bashrc はどこにも使用されていません。set -e(私は当初、それが犯人ではないかと疑っていました)。トラップもありません。また、$? からのエラー コードも表示されます。は 100 です。

4

1 に答える 1

2

これは実際の解決策ではなく、改善の提案です。

function sagi() {
  sudo apt-get -qq --dry-run install $1
  if [ $? == 100 ]; then
    sudo apt-cache search $1
  else
    sudo apt-get install $1
  fi
}

これにより、必要なことを行うためのよりクリーンで安全な方法が得られます。最初に、最初にドライランを実行して、そのパッケージがリポジトリにあるかどうかを確認します。その後、エラー コードが 100 (パッケージが見つからないために失敗) であるかどうかを確認し、そうでない場合はキャッシュ検索を呼び出し、それ以外の場合はパッケージをインストールするだけです。

于 2010-11-07T21:08:10.210 に答える