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