ссылка на исполняемый файл и удаление некоторых параметров

Имя файла относительно текущего каталога в то время, когда процесс 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

2
22.10.2015, 16:08
2 ответа

Канонический способ - это цикл, имеющий форму:

#! /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] (который он может использовать в своих сообщениях об ошибках или для повторного выполнения).

2
27.01.2020, 22:04
#!/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;

Хм, он тоже немного короче :)

1
27.01.2020, 22:04

Теги

Похожие вопросы