シェルスクリプトでPerlコードを生成しない(しようとすると)!!!
perl -i -pe'
BEGIN {
$repo = shift(@ARGV);
$newrepo = shift(@ARGV);
open(my $fh, '<', $ARGV[0])
or die("Can't open $ARGV[0]: $!\n");
}
s|^\Q$repo:\E.+$|$newrepo|g;
' "$repo" "$newrepo" .HEAD
または
export repo
export newrepo
perl -i -pe'
BEGIN {
open(my $fh, '<', $ARGV[0])
or die("Can't open $ARGV[0]: $!\n");
}
s|^\Q$ENV{repo}:\E.+$|$ENV{newrepo}|g;
' .HEAD
または
repo="$repo" newrepo="$newrepo" perl -i -pe'
BEGIN {
open(my $fh, '<', $ARGV[0])
or die("Can't open $ARGV[0]: $!\n");
}
s|^\Q$ENV{repo}:\E.+$|$ENV{newrepo}|g;
' .HEAD
注:
ファイルは偽の場合でも-f
リターンを存在することができます。実際のエラーは$!
です。 open
を使用すると、ファイルを開くことができるかどうかを確認する際に、より正確に-f
となります。
わかりやすくするために改行を追加しました。必要に応じてそれらを削除しますが、削除する必要はありません。
この結果、役に立たなかった-0777
と/m
が削除されました。
最初の行の最後にある見積もりは、2行目の二重引用符( '.HEAD'の直前)の後にする必要があります。さらに、現在のディレクトリに '.HEAD'という名前のファイルがありますか? – Dada
はい.HEADは、二重引用符の後に一重引用符を置くと変数が展開されない場合に存在します。 –
シェル変数はPerl変数ではありません。 – choroba