Имя файла относительно текущего каталога в то время, когда процесс Java пытался получить доступ к нему. Нет никакого верного способа определить это. Можно посмотреть на текущий каталог процесса:
ls -l /proc/1615/cwd
Если процесс все еще будет иметь открытый файл, то Вы сможете легко узнать, где это.
ls -l /proc/1615/fd
Если Вы не можете найти файл этим путем, потому что программа изменила свой текущий каталог, можно попытаться проверить текущий каталог родительского процесса, если родительский процесс все еще жив. Использовать ps l 1615
для наблюдения PID родительского процесса (PPID) затем посмотрите на родительский процесс cwd
.
Если это перестало работать, можно использовать определять местоположение команду для поиска файлов с определенным именем.
locate exhibitor-1.2.3-jar-with-dependencies.jar
Определять местоположение команда ищет индекс, который обновляется каждую ночь (или в переменные времена, если Вы выключаете свой компьютер ночью), поэтому при установке файла недавно Вы не могли бы найти это тем путем.
В отчаянии можно использовать find
команда для поиска файла в иерархии каталогов. Например, если Вы подозреваете, что файл находится под Вашим корневым каталогом:
find ~ -name exhibitor-1.2.3-jar-with-dependencies.jar
Смотреть везде в системных каталогах:
find / -xdev -name exhibitor-1.2.3-jar-with-dependencies.jar
Канонический способ - это цикл, имеющий форму:
#! /bin/sh -
for i do # loop over the positional parameters
case $i in
--notices|--warnings) ;;
*) set -- "$@" "$i" # append to the end of the positional parameter
# list if neither --notices nor --warnings
esac
shift # remove from the head of the positional parameter list
done
exec "${0}_orig" "$@"
Вы также можете заменить #! /bin/sh -
на ksh
, zsh
, yash
или bash
и замените exec
на exec... "$0"
, чтобы ibtool_orig
передавал /path/to/ibtool
в качестве argv[0]
(который он может использовать в своих сообщениях об ошибках или для повторного выполнения).
#!/bin/sh
new='/usr/bin/ibtool_orig'
for i; do
if [ "$i" = --errors ] || [ "$i" = --warnings ]; then
: # skip these
else
new="$new $i"
fi
done
exec $new
Предполагается, что в параметрах не будет специальных символов оболочки, таких как кавычки, скобки и т. Д .; обработка, которая делает это намного более сложным, и тогда сценарий perl может быть проще:
#!/usr/bin/perl
my @new = grep(!/^--(errors|warnings)\z/, @ARGV);
exec '/usr/bin/ibtool_orig', @new;
Хм, он тоже немного короче :)