Трассировка стека стека в строку
import java.io.PrintWriter;
import java.io.StringWriter;
public class StackTraceUtils {
public static String stackTraceToString(StackTraceElement[] stackTrace) {
StringWriter sw = new StringWriter();
printStackTrace(stackTrace, new PrintWriter(sw));
return sw.toString();
}
public static void printStackTrace(StackTraceElement[] stackTrace, PrintWriter pw) {
for(StackTraceElement stackTraceEl : stackTrace) {
pw.println(stackTraceEl);
}
}
}
Это полезно, когда вы хотите распечатать текущую трассировку стека потоков, не создавая экземпляр Throwable
- но обратите внимание, что создание новой Throwable
и получение трассировки стека оттуда быстрее и дешевле, чем называть Thread.getStackTrace
.
Хорошо, по крайней мере, что-то вроде этого должно работать:
instance_id=$(ec2-run-instances ami-dd8ea5a9 [...] | awk '/INSTANCE/{print $2}')
По общему признанию, я немного ленивый думал, что быстрее спросить о SO, чем переучивать некоторые основы AWK ...: -)
Редактировать : упрощенное использование AWK, как предложил Деннис. Кроме того, используя $()
вместо `` для ясности, и избавился от промежуточной переменной.
В качестве альтернативы ec2-run-instances
, вы можете создать один экземпляр ec2 и получить InstanceId на одну строку с помощью awscli run-instances :
export MyServerID=$(aws ec2 run-instances --image-id AMI --count 1 --instance-type t2.micro --key-name "my_ssh_key" --security-group-ids sg-xxx --subnet-id subnet-yyy --query 'Instances[0].InstanceId' --output text)