0

以下のコードを見つけてください。

Dir.chdir('/home/user/Source/pxe/')do
system("git log "+ version_one +" " + version_two +" --pretty=format:'%h %ad%x09%an%x09%s' --date=short", :out => ['gitlog.txt', 'a'])
end

ユーザーからのバージョン入力に応じて、git log2 つのバージョン間で実行すると、ログがgitlog.txtpxe フォルダーに保存されます。

今私の質問は、これgitlog.txtを別のディレクトリに作成し、ログを同じファイルに追加する方法です。たとえば、新しいファイルパスは次のとおりです。/home/user/server-diff/gitlog.txt

以下の方法で試してみましたが、ファイルが書き込まれず、実行時にエラーが発生しました Permission denied- /home/user/server-diff/gitlog.txt (Errno::EACCES):

file = File.new("/home/user/server-diff/gitlog.txt", "w")
Dir.chdir('/home/user/Source/pxe/')do
    system("git log "+ version_one +" " + version_two +" --pretty=format:'%h %ad%x09%an%x09%s' --date=short", :out => [file, 'a'])
    end

先に進む方法を教えてください。これに関連してもう 1 つ質問があります。

尋ねられた質問に不明確な点がある場合はお知らせください。

4

1 に答える 1

0

通話でファイルを使用する 2 つの方法を混同していsystemます。事前にファイルオブジェクトを使用して(「書き込み」モードではなく「追加」モードで開いていることを確認してください)、そのオブジェクトを:systemなしで渡すことができます。"a"

file = File.new("/home/user/server-diff/gitlog.txt", "a")
Dir.chdir('/home/user/Source/pxe/')do
  system("git log "+ version_one +" " + version_two +" --pretty=format:'%h %ad%x09%an%x09%s' --date=short", :out => file)
end

または、file = ...行を完全に削除して、ファイル名を に渡し、オプションsystemを保持することもできます。"a"

Dir.chdir('/home/user/Source/pxe/')do
  system("git log "+ version_one +" " + version_two +" --pretty=format:'%h %ad%x09%an%x09%s' --date=short", :out => ["/home/user/server-diff/gitlog.txt", "a"])
end

また、書き込み先のディレクトリが存在することを確認する必要があります。

Dir.mkdir("/home/user/server-diff") unless Dir.exists?("/home/user/server-diff")

また、Permission Denied エラーが発生した場合は、実際にフォルダー (および既に存在する場合はファイル) への書き込みアクセス許可があることを確認する必要があります。

于 2013-10-08T11:33:17.220 に答える