質問

.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

(バッシュプロンプトで)すべてが期待どおりに機能します。私は何が間違っているのですか?


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

役に立ちましたか?

解決

それは本当に解決策ではなく、改善の提案です。

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であるか(パッケージが見つからないため障害)かどうかを確認し、パッケージをインストールするだけでキャッシュ検索を呼び出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top