Когда вы пишете java Test < input.txt
, оболочка, в которую вы пишете, выполняет 2 действия: сначала она читает содержимое файла input.txt, затем она запускает команду java
с аргументом «Test» и его стандартом.input (stdin / System.in), заполненный содержимым input.txt.
С точки зрения запущенной команды никогда не было < input.txt
, на стандартном входе есть только некоторый контент.
Возможно, вы сможете сделать что-то на стороне ОС, например, на RHEL я могу вернуть файл следующим образом:
$ sleep 50 < /path/to/file &
[1] 18492
$ my_process_pid=$!
$ cat /proc/$my_process_pid/cmdline
sleep50 # no signs of the redirection
$ readlink /proc/$my_process_pid/fd/0 # but we can check what stdin links to
/path/to/file
Мне кажется, что самый простой способ получить имя файла будетзаставить пользователя передать местоположение файла в качестве аргумента, а не использовать перенаправления для непосредственного использования содержимого файла.