Я думаю, проблема в том, что puts
делает что-то негласное. В частности, , если в качестве аргумента командной строки указано имя файла , gets
читает следующую строку из этого файла (см. Эти документы Документы Ruby, Ядро: получает ).
Итак, если скрипт в одну строку:
puts gets
... вызывается с такими аргументами CLI, как этот ruby onelinescript.rb some_file.txt
, он напечатает первую строку some_file.txt
.
Проблема в вашем случае, я думаю, заключается в том, что вы сначала открываете файл из списка аргументов CLI для записи, а затем неявно пытаетесь открыть его для чтения с помощью gets
, что не работает. Чтобы это исправить, вы должны явно указать объект ввода-вывода, который вы вызываете gets
on:
file_name = ARGV[0]
of = File.open(file_name, 'w')
while a = STDIN.gets.chomp
puts a
of.puts a
end
P. S. Если я ошибаюсь, пожалуйста, не стесняйтесь указывать на это.