как определить определенную часть исполняемого файла?

Да, чтобы запустить банку, она должна существовать.

При его создании вам необходимо сопоставить структуру каталогов с структурой пакета.

Например, ваши каталоги могут быть:

/home/ellen/proj/java/foo/example/src/example/Foo.java 
/home/ellen/proj/java/foo/example/src/example/util/MyList.java 

для источников и для файлов классов:

/home/ellen/proj/java/foo/example/classes/example/Foo.class
/home/ellen/proj/java/foo/example/classes/example/util/MyList.class

(часто вы находите классы в a ../bin/ .. вместо ../classes/ .. именованная папка или исходные файлы и файлы классов смешиваются в одних и тех же каталогах)

, соответствующих структуре пакета:

, то вы должны перейти в базовый каталог иерархии:

cd /home/ellen/proj/java/foo/example/classes

или установить его с параметром -C jar -C /home/ellen/proj/java/foo/example/classes ... или из исходного jar -C proj/java/foo/example/classes ... в качестве относительного пути.

Вы создаете файл jar, например:

jar -cf example.jar *.class

и проверяете его с помощью:

jar -tf example.jar 

Обратите внимание, что есть файл манифеста, автоматически сгенерированный и полезный, в качестве шаблона, где вы можете добавить информацию о том, что ваш основной класс, если у вас есть такой, но который довольно строгий в отношении синтаксиса (верхний / нижний регистр, разрывы строк).

Manifest-Version: 1.0
Created-By: 9-internal (Oracle Corporation)    
Main-Class: example.Main

Такая запись основного класса должна быть добавлена, если вы хотите запустить ее без указания основного класса:

java -jar example.jar 

, иначе вы должны использовать: [ ! d12]

java -cp example.jar example.Main

По существу, файл jar представляет собой zip-архив и может работать с этими инструментами.

Чистое разделение src / и bin / files полезно, когда вы имеют более чем несколько классов и, возможно, глубокую структуру пакетов.

 jar -cf example.jar -C classes . 

будет тогда, начиная с классов каталога / включать все, что часто вам нужно. (пример / класс, пример / util / .class, example / net / * class ...)

 jar --help 

информирует вас о синтаксисе.

3
задан 16 May 2018 в 16:21

9 ответов

A time, который работает с командами и переменной SECONDS, являются одновременно функциями bash, а не sh. С помощью sh вы можете получить метки времени в двух точках, используя команду date, а затем получить разницу. date +%s даст время в секундах с эпохи.

# timer start
start=$(date +%s)
/bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip
do
    # Append everything to droplist
    $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs "
    $IPTABLES -A droplist -i eth0 -s $ip -j DROP
done <"$BLOCKEDIPS_XS"
# timer stops, shows elapsed time
echo $(( $(date +%s) - start ))
3
ответ дан 22 May 2018 в 10:40

A time, который работает с командами и переменной SECONDS, являются одновременно функциями bash, а не sh. С помощью sh вы можете получить метки времени в двух точках, используя команду date, а затем получить разницу. date +%s даст время в секундах с эпохи.

# timer start start=$(date +%s) /bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip do # Append everything to droplist $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs " $IPTABLES -A droplist -i eth0 -s $ip -j DROP done <"$BLOCKEDIPS_XS" # timer stops, shows elapsed time echo $(( $(date +%s) - start ))
3
ответ дан 17 July 2018 в 14:10

A time, который работает с командами и переменной SECONDS, являются одновременно функциями bash, а не sh. С помощью sh вы можете получить метки времени в двух точках, используя команду date, а затем получить разницу. date +%s даст время в секундах с эпохи.

# timer start start=$(date +%s) /bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip do # Append everything to droplist $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs " $IPTABLES -A droplist -i eth0 -s $ip -j DROP done <"$BLOCKEDIPS_XS" # timer stops, shows elapsed time echo $(( $(date +%s) - start ))
3
ответ дан 20 July 2018 в 14:14

Вы можете временно использовать скрипт bash, используя группировку команд

#!/bin/bash

echo "foo"
sleep 1

time { 
sleep 2
echo "bar"
sleep 3
}

sleep 1
echo "baz"

Пример

$ ./somescript.sh 
foo
bar

real    0m5.006s
user    0m0.005s
sys 0m0.001s
baz

Группировка с подоболочкой (т.е. скобки вместо брекетов) должна тоже произведение.

5
ответ дан 22 May 2018 в 10:40
  • 1
    В этом случае группа может даже не понадобиться - ключевое слово bash time работает на конвейерах, а часть, которую OP хочет использовать, - это единственный конвейер ... Но они используют sh, поэтому внешняя команда времени будет что делает его более сложным. – muru 16 May 2018 в 16:42
  • 2
    @muru хороший улов - я пропустил, что OP использовал /bin/sh – steeldriver 16 May 2018 в 18:07

Самый простой способ - поместить команду time перед запущенной командой. Например:

$ time locate display-auto
/etc/cron.d/display-auto-brightness
/home/rick/Downloads/display-auto-brightness
/home/rick/Pictures/display-auto-brightness conky.png
/home/rick/Pictures/display-auto-brightness systray.png
/home/rick/Pictures/display-auto-brightness-config 1.png
/home/rick/Pictures/ps display-auto-brightness.png
/lib/systemd/system-sleep/display-auto-brightness
/mnt/e/etc/cron.d/display-auto-brightness
/mnt/e/lib/systemd/system-sleep/display-auto-brightness
/mnt/e/usr/local/bin/display-auto-brightness
/usr/local/bin/display-auto-brightness

real    0m0.826s
user    0m0.803s
sys     0m0.016s

Мы используем команду locate для поиска всех имен файлов с display-auto в именах. Просто добавьте команду time перед командой.

Получение времени для части скрипта

Вы можете использовать переменную $SECONDS внутри вашей чтобы получить время для его части. Например:

SECONDS=0
/bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip
do
    # Append everything to droplist
    $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs "
    $IPTABLES -A droplist -i eth0 -s $ip -j DROP
done <"$BLOCKEDIPS_XS"
timer stops, shows elapsed time
BlockTime=$SECONDS
echo "Total time to block IPs: $BlockTime Seconds"

В этом коде SECONDS сбрасывается на ноль, а затем получается после продолжительного процесса.

2
ответ дан 22 May 2018 в 10:40
  • 1
    да, это то, что я вижу в основном, но теперь мне это нужно в файле, как если бы вы использовали комманду nano (filename), чтобы не работать с nano, но поместить ее в файл, над которым вы работаете, и как только файл выполняется с помощью [F2] – delfiler 16 May 2018 в 13:46
  • 2
    @delfiler Я добавил переменную SECONDS, чтобы получить время только для части скрипта. – WinEunuuchs2Unix 16 May 2018 в 13:55
  • 3
    поэтому, если я прав, я должен сначала поставить SECONDS=0, затем положить rsyncTime=$SECONDS в конец, правильно? – delfiler 16 May 2018 в 14:02
  • 4
    @delfiler Правильно! – WinEunuuchs2Unix 16 May 2018 в 14:05
  • 5
    печально сообщить, что не работает – delfiler 16 May 2018 в 14:28

Вы можете временно использовать скрипт bash, используя группировку команд

#!/bin/bash echo "foo" sleep 1 time { sleep 2 echo "bar" sleep 3 } sleep 1 echo "baz"

Пример

$ ./somescript.sh foo bar real 0m5.006s user 0m0.005s sys 0m0.001s baz

Группировка с подоболочкой (т.е. скобки вместо брекетов) должна тоже произведение.

5
ответ дан 17 July 2018 в 14:10

Самый простой способ - поместить команду time перед запущенной командой. Например:

$ time locate display-auto /etc/cron.d/display-auto-brightness /home/rick/Downloads/display-auto-brightness /home/rick/Pictures/display-auto-brightness conky.png /home/rick/Pictures/display-auto-brightness systray.png /home/rick/Pictures/display-auto-brightness-config 1.png /home/rick/Pictures/ps display-auto-brightness.png /lib/systemd/system-sleep/display-auto-brightness /mnt/e/etc/cron.d/display-auto-brightness /mnt/e/lib/systemd/system-sleep/display-auto-brightness /mnt/e/usr/local/bin/display-auto-brightness /usr/local/bin/display-auto-brightness real 0m0.826s user 0m0.803s sys 0m0.016s

Мы используем команду locate для поиска всех имен файлов с display-auto в именах. Просто добавьте команду time перед командой.

Получение времени для части скрипта

Вы можете использовать переменную $SECONDS внутри вашей чтобы получить время для его части. Например:

SECONDS=0 /bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip do # Append everything to droplist $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs " $IPTABLES -A droplist -i eth0 -s $ip -j DROP done <"$BLOCKEDIPS_XS" timer stops, shows elapsed time BlockTime=$SECONDS echo "Total time to block IPs: $BlockTime Seconds"

В этом коде SECONDS сбрасывается на ноль, а затем получается после продолжительного процесса.

2
ответ дан 17 July 2018 в 14:10

Вы можете временно использовать скрипт bash, используя группировку команд

#!/bin/bash echo "foo" sleep 1 time { sleep 2 echo "bar" sleep 3 } sleep 1 echo "baz"

Пример

$ ./somescript.sh foo bar real 0m5.006s user 0m0.005s sys 0m0.001s baz

Группировка с подоболочкой (т.е. скобки вместо брекетов) должна тоже произведение.

5
ответ дан 20 July 2018 в 14:14
  • 1
    В этом случае группа может даже не понадобиться - ключевое слово bash time работает на конвейерах, а часть, которую OP хочет использовать, - это единственный конвейер ... Но они используют sh, поэтому внешняя команда времени будет что делает его более сложным. – muru 16 May 2018 в 16:42
  • 2
    @muru хороший улов - я пропустил, что OP использовал /bin/sh – steeldriver 16 May 2018 в 18:07

Самый простой способ - поместить команду time перед запущенной командой. Например:

$ time locate display-auto /etc/cron.d/display-auto-brightness /home/rick/Downloads/display-auto-brightness /home/rick/Pictures/display-auto-brightness conky.png /home/rick/Pictures/display-auto-brightness systray.png /home/rick/Pictures/display-auto-brightness-config 1.png /home/rick/Pictures/ps display-auto-brightness.png /lib/systemd/system-sleep/display-auto-brightness /mnt/e/etc/cron.d/display-auto-brightness /mnt/e/lib/systemd/system-sleep/display-auto-brightness /mnt/e/usr/local/bin/display-auto-brightness /usr/local/bin/display-auto-brightness real 0m0.826s user 0m0.803s sys 0m0.016s

Мы используем команду locate для поиска всех имен файлов с display-auto в именах. Просто добавьте команду time перед командой.

Получение времени для части скрипта

Вы можете использовать переменную $SECONDS внутри вашей чтобы получить время для его части. Например:

SECONDS=0 /bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip do # Append everything to droplist $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs " $IPTABLES -A droplist -i eth0 -s $ip -j DROP done <"$BLOCKEDIPS_XS" timer stops, shows elapsed time BlockTime=$SECONDS echo "Total time to block IPs: $BlockTime Seconds"

В этом коде SECONDS сбрасывается на ноль, а затем получается после продолжительного процесса.

2
ответ дан 20 July 2018 в 14:14
  • 1
    да, это то, что я вижу в основном, но теперь мне это нужно в файле, как если бы вы использовали комманду nano (filename), чтобы не работать с nano, но поместить ее в файл, над которым вы работаете, и как только файл выполняется с помощью [F2] – delfiler 16 May 2018 в 13:46
  • 2
    @delfiler Я добавил переменную SECONDS, чтобы получить время только для части скрипта. – WinEunuuchs2Unix 16 May 2018 в 13:55
  • 3
    поэтому, если я прав, я должен сначала поставить SECONDS=0, затем положить rsyncTime=$SECONDS в конец, правильно? – delfiler 16 May 2018 в 14:02
  • 4
    @delfiler Правильно! – WinEunuuchs2Unix 16 May 2018 в 14:05
  • 5
    печально сообщить, что не работает – delfiler 16 May 2018 в 14:28

Другие вопросы по тегам:

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