2017-07-28 6 views
-1

私はtschを使用して、指定されたフォルダ内のライブラリのリンクを更新するスクリプトを作成しています。ライブラリの最新バージョンを見つけ、lib名だけを取り除く

私は、(例えば)を使用して、私に

libelf.so.1 -> libelf-0.158.so 
libelf.so.0 -> libelf.so.0.8.13 
libelf.so.1 -> libelf-0.158.so 

を与えますが、私はちょうどlibelf-0.158.so部分を除去する方法がわからない

ldconfig -v | grep libelf 

をライブラリの最新バージョンを入手することができます結果の私は

set lib = `ldconfig -v | grep libelf | awk '$1 == "-> " {gsub(/\/.*$/, "", $2); print $2}'` 

AKW使用しようとしましたが、私にはないので、私はまた、指定したフォルダ内のすべてのライブラリリンクを検索しまうループにこれを挿入したい任意の結果

を取得できませんでしたあらかじめ、知っている、フォルダがあり、私は

if (-f libelf.so.1) ln -fs /usr/lib64/libelf-0.158.so libelf.so.1 
if (-f libreadline.so.1) ln -fs /lib64/libreadline.so.6.3 libreadline.so.1 
if (-f libXv.so.1) ln -fs /usr/lib64/libXv.so.1.0.0 libXv.so.1 
+0

awk '$ 2 == " - >" {print $ 3} "? – archemiro

+1

'私はtschを使用していますが、私はスクリプトを作成しようとしています.' - しないでください! [Google「csh not why」](https://www.google.com/search?q=csh+why+not&ie=utf-8&oe=utf-8) 'libelf.so.1 - > libelf-0.158.soのような入力行に'/'がない場合、' gsub(/\/.*$/、 "、$ 2)'で何をしようとしていますか? '?すべての入力行にawkスクリプトが ' - >'をテストしているのはなぜですか? –

答えて

2

のようなあなたが必要なすべてを掲載した内容からは、すべてのリンクの可能性を書くのが好きではないと思われるライブラリのリンクです:

ldconfig -v | awk '/libelf/{print $3}' 

すでにawkを使用しているときにgrep(またはsed)は必要ないことに注意してください。なぜなら、awkはできること全てを行うことができるからです。

+1

ありがとう、それは多くの助けとなりました! – nc2017

+0

次の作業はhttps://stackoverflow.com/help/someone-answersをご覧ください。 –

0

質問の2番目の部分は未回答です。

# ldconfig -p | awk -v dir="." '/libelf/{ \ 
        printf("if (-f %s/%s) ln -fs %s %s/%s\n",\ 
          dir, $1, $4, dir, $1 \ 
        )}' 

結果として与える:

if (-f ./libelf.so.1) ln -fs /lib64/libelf.so.1 ./libelf.so.1 
if (-f ./libelf.so.1) ln -fs /lib/libelf.so.1 ./libelf.so.1 

いくつかの発言:

  • あなたはuniqへの呼び出しにパイプawkコマンドをすることができますが、あなた以来、あなたは、このようなものを使用することができますln -fを使用している場合は問題ありません。
  • -v dir=を使用すると、リンクを作成するディレクトリを設定できます。
  • -vにはawkスクリプトでフィルタリングする必要があるエラーが表示される可能性があるため、ldconfig -pを使用することをお勧めします。
関連する問題