私はホームブログアーカイブを持っていて、その中に何があるのか見たいです。実際にスクリプト部分を実行するのではなく、どのファイルが抽出されますか?どうすればいいですか?
実際には何も抽出しないほうが良いでしょうが、それが唯一の方法であれば(ba)shコードが実際に実行されない限り、それを喜んで行います。
答え1
生成されたアーカイブには、その--list
内容を一覧表示するために使用できるオプションがあります。
ちなみに、私はこのバージョンのDebianについて話しています。
ii makeself 2.2.0-1 all utility to generate self-extractables
スクリプトから次のブロックを生成します。
MS_Help()
{
cat << EOH >&2
Makeself version 2.2.0
1) Getting help or info about $0 :
$0 --help Print this message
$0 --info Print embedded info : title, default target directory, embedded script ...
$0 --lsm Print embedded lsm entry (or no LSM)
$0 --list Print the list of files in the archive
$0 --check Checks integrity of the archive
2) Running $0 :
$0 [options] [--] [additional arguments to embedded script]
with following options (in that order)
--confirm Ask before running embedded script
--quiet Do not print anything except error messages
--noexec Do not run embedded script
--keep Do not erase target directory after running
the embedded script
--noprogress Do not show the progress during the decompression
--nox11 Do not spawn an xterm
--nochown Do not give the extracted files to the current user
--target dir Extract directly to a target directory
directory path can be either absolute or relative
--tar arg1 [arg2 ...] Access the contents of the archive through the tar command
-- Following arguments will be passed to the embedded script
EOH
}
マニュアルページには少し作業が必要ですが、スクリプトは読みやすいです。Gitリポジトリ
答え2
自作アーカイブは3つの部分で構成されています。
- シェルスクリプト。
- gzipで圧縮されたtarアーカイブ。
- (オプション)最後に、より多くのデータがあります。
通常、アーカイブを実行すると、埋め込まれたアーカイブを一時ディレクトリに抽出し、アーカイブから抽出された特定のファイルを実行するシェルスクリプトを実行します。スクリプトには独自のサイズとtarファイルのサイズに関する情報が含まれているため、中間に含まれるtarファイルを抽出できます。
(「最後の追加データ」は何でも構いません。たとえば、GoGインストーラの場合、実際のゲームコンテンツを含むzipファイルが含まれています。)これらのファイルはunzip
makeselfを完全にバイパスしてを使用して抽出できます。これはzipファイルが相対オフセットを使用するため、機能します。
Linuxでファイルを開くとless
、知っておくべきことすべてを知らせるスクリプトの内容を見ることができます。上部近くに次のような行があるはずです。
filesizes="12345"
これは、含まれるtarファイルの長さが12345バイトであることを示しています。 (理論的には、filesizes
複数のファイルのサイズを一覧表示することは可能ですが、実際にはアーカイブに複数のファイルが含まれる場合はほとんどありません。)
その後、検索するとhead
次の行を見つける必要があります。
offset=`head -n 519 "$1" | wc -c | tr -d " "`
これは、スクリプトが独自のサイズを計算するために使用するロジックです。ご覧のとおり、スクリプトは長さが519行であることを知っています。
これで、スクリプトのサイズ(行)と埋め込みtarアーカイブのサイズ(バイト)がわかったので、次のように埋め込みアーカイブの内容を一覧表示できます。
tail +520 ~/Downloads/gog_huniepop_2.0.0.3.sh | head -c 12345 | tar tz
tail +N
行から始まるファイルの内容が一覧表示されますN
。私たちはただ始めたいので、519より1より多くの520を使用します。後ろにスクリプトの終わり(最後の行を除く)
いくつかの注意:
- ファイルを一覧表示する代わりにファイルを抽出するにはを使用します
tar xz
。tar tz
空のディレクトリでこれを行うことができます。 - BSDでは、tarはデフォルトでstdinの代わりにテープデバイスから読み取られます。
tar tzf -
この場合に使用されます。
答え3
私の場合は簡単です。
makeself_archive.sh --tar xf
これにより、アーカイブ内容がPWDに抽出されます。