Для тех, кто хочет подавить только StackTrace и не отбрасывать важные подсказки об ошибках, вы можете реализовать ExceptionFilter.
Вы можете сделать это в два этапа:
Напишите свой фильтр следующим образом:
using System.Web.Http.Filters;
using System.Net;
using System.Net.Http;
public class MyExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
var request = context.Request;
var response = request.CreateErrorResponse(HttpStatusCode.InternalServerError, context.Exception.Message);
var content = (System.Net.Http.ObjectContent)response.Content;
var errorValues = (System.Web.Http.HttpError)content.Value;
errorValues["ExceptionMessage"] = context.Exception.Message;
errorValues["ExceptionType"] = context.Exception.GetType().Name;
if (context.ActionContext != null)
{
errorValues["ActionName"] = context.ActionContext.ActionDescriptor.ActionName;
errorValues["ControllerName"] = context.ActionContext.ControllerContext.ControllerDescriptor.ControllerName;
}
context.Response = response;
}
}
заставить WebApi использовать ваш ExceptionFilter :
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new MyExceptionFilterAttribute());
Вы получите это:
{
"Message": "Your exception is here!",
"ExceptionMessage": "Your exception is here!",
"ExceptionType": "Exception",
"ActionName": "MyAction",
"ControllerName": "MyController"
}
Дополнительная информация по адресу: https://docs.microsoft.com/en-us / САШ / веб-апи / обзор / обработки ошибок / обработки исключений
There's cd -
to go to the previously-visited directory:
/usr/local/bin> cd /i/am/a/banana
/i/am/a/banana> cd -
/usr/local/bin>
...and then there are all those useful incarnations of the BASH for-loop:
for file in *.txt; do ls $file; done
for item in $(echo foo bar baz); do echo $item; done
for num in {0..9}; do echo $num; done
: > truncate-file-to-zero-bytes.txt # without changing its permissions
См .: codenippets.joyent.com/posts/show/2067
Чтобы изменить все файлы в ~ , которые принадлежат группе vboxusers , должны принадлежать группе пользователей kent, я кое-что создал. Но поскольку у него был недостаток в использовании xargs, я заменяю его на решение, предложенное в комментарии к этому ответу:
$ find ~ -group vboxusers -exec chown kent:kent {} \;
В начале сценария, который должен запускаться от имени пользователя root:
if [ `id -u` != 0 ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
Вот еще один:
#!/bin/bash
# Shows the full path of files, good for copy pasting and for when
# listing the full paths is necessary.
# Usage: Run in the working directory (no path), otherwise takes the
# same file specification as ls.
for file in $(ls "$@"); do
echo -n $(pwd)
[[ $(pwd) != "/" ]] && echo -n /
echo $file
done
Добавьте пробел (или другой разделитель) только в том случае, если переменная установлена, чтобы избежать уродливых ненужных пробелов.
$ first=Joe
$ last= # last name blank, the following echoes a space before the period
$ echo "Hello, $first $last. Welcome to..."
Hello, Joe . Welcome to...
$ echo "Hello, $first${last:+ $last}. Welcome to..."
Hello, Joe. Welcome to...
$ last=Green
$ echo "Hello, $first${last:+ $last}. Welcome to..."
Hello, Joe Green. Welcome to...
В сценарии BASH присвойте аргумент переменной, но укажите значение по умолчанию, если оно существует:
MYVAR=${1:-default}
$ MYVAR будет содержать первый аргумент, если был задан другой аргумент «по умолчанию».
Found this somewhere on the net a long time ago:
function bashtips {
cat <<EOF
DIRECTORIES
-----------
~- Previous working directory
pushd tmp Push tmp && cd tmp
popd Pop && cd
GLOBBING AND OUTPUT SUBSTITUTION
--------------------------------
ls a[b-dx]e Globs abe, ace, ade, axe
ls a{c,bl}e Globs ace, able
\$(ls) \`ls\` (but nestable!)
HISTORY MANIPULATION
--------------------
!! Last command
!?foo Last command containing \`foo'
^foo^bar^ Last command containing \`foo', but substitute \`bar'
!!:0 Last command word
!!:^ Last command's first argument
!\$ Last command's last argument
!!:* Last command's arguments
!!:x-y Arguments x to y of last command
C-s search forwards in history
C-r search backwards in history
LINE EDITING
------------
M-d kill to end of word
C-w kill to beginning of word
C-k kill to end of line
C-u kill to beginning of line
M-r revert all modifications to current line
C-] search forwards in line
M-C-] search backwards in line
C-t transpose characters
M-t transpose words
M-u uppercase word
M-l lowercase word
M-c capitalize word
COMPLETION
----------
M-/ complete filename
M-~ complete user name
M-@ complete host name
M-\$ complete variable name
M-! complete command name
M-^ complete history
EOF
}
Слишком долго, чтобы включать все, но решения для Как мне управлять элементами $ PATH в сценариях оболочки? мне очень полезны ...
Пока нет HTTP push технологии, вы никогда не получите чат в реальном времени, только используя JavaScript
.
# tested on Mac OS X
find -x -E . \( -type d -regex '.*/\.svn/*.*' -prune \) -ls # test
find -x -E . \( -type d -regex '.*/\.svn/*.*' -prune \) -exec /bin/rm -PRfv '{}' \;
Добрый день,
Мой любимый и применимый к другим оболочкам, поддерживающим псевдонимы, простой способ временно отключить псевдоним, добавив к команде обратную косую черту.
Итак:
alias rm='rm -i'
всегда будет давать вам интерактивный режим при вводе rm, ввод
\rm
в командной строке обходит псевдоним.
HTH
приветствует,
Это не так полезно, но действительно интересно:
history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -n | tail | sort -nr
Он выводит 10 наиболее часто используемых команд.
РЕДАКТИРОВАТЬ: Этот вопрос действительно похож на этот .
Мы разрабатываем веб-сайты и храним для них код в SVN. При переходе к производству мы не хотим, чтобы каталоги .svn отображались. Следующий код рекурсирует каталоги и удаляет ненужные (может использоваться для любых нежелательных каталогов). Не совсем bash, но, тем не менее, полезно.
find . -type d -name .svn | xargs rm -rf
выполнять с самого верхнего пути в продукте ... конечно, будьте осторожны, поскольку выполнение в неправильном месте может привести к очень плохим вещам.
Вы также можете выполнить обычный файл. изменив -тип d на -тип f
Я использую это для отступа исходного кода на четыре пробела и копирования результата в буфер обмена в X:
cat src/Something.java | sed -e 's/^/ /g' | xsel
Теперь Something.java готов вставляется средней кнопкой мыши. Я знаю, что могу уменьшить выражение на одну вертикальную черту и удалить кота, но мне это нравится, поскольку мне легче редактировать начало при повторном использовании выражения.
Эффективный (и интуитивно понятный) способ получить полный канонический путь к указанному файлу. Это разрешит все случаи символических ссылок, относительных ссылок на файлы и т. Д.
full_path="$(cd $(/usr/bin/dirname "$file"); pwd -P)/$(/usr/bin/basename "$file")"
Я часто использую этот в сочетании с разработкой на Java:
#!/bin/sh if [ "$1" == "" ] || [ "$2" == "" ]; then echo "Usage jarfinder.sh " exit fi SEARCH=`echo $2 | sed -e 's/[\\\/]/./g'` echo Searching jars and zips in $1 for "$SEARCH" find $1 -type f -printf "'%p'\n" | egrep "\.(jar|zip)'$" | sed -e "s/\(.*\)/echo \1 ; jar tvf \1 | sed -e 's\/^\/ \/' | grep -i \"$SEARCH\"/" | sh
, который я храню в своей коллекции удобных скриптов .
Я также использую этот- лайнер много:
find . -name "*.java" | xargs grep -li "yadayada"
конец этого:
find . -name "*.java" | sed -e 's+\(.*\)+echo \1 ; yada_cmd \1+' | sh
Вот красивое выражение grep
для удаления пустых строк и строк комментариев:
grep -v '^[ \t]*$\|^[ \t]*#' /etc/ssh/sshd_config
Выше будут отображены используемые настройки в sshd_config
без каких-либо помех.
Перевод одного языка на другой является лишь частным случаем для класса программ, называемых компиляторами, переводчиками и переводчиками.
Этот класс программы принимает поток входных символов («исходный код»), которые могут обычно описываться формальной грамматикой и выводить поток символов.
Этот выходной поток символов может быть:
хорошо, если Список
действительно является списком < T >
, вы сможете сделать:
recipes = context.Recipes.Where(recipe => recipe.IngredientList.Exists(i => i.Id == ingredient.Id)).ToList();
, но это означает, что весь список должен быть заполнен. Поскольку это выглядит как запрос LINQ к SQL, я предполагаю, что Список ошибок
является просто связанной таблицей...? В этом случае у вас не будет полного списка, но вы все равно сможете сделать что-то подобное:
recipes = context.Recipes.Where(recipe => recipe.IngredientList.Count(i => i.Id == ingredient.Id) > 0).ToList();
... и он все равно должен просто запросить SQL-сервер один раз.
EDIT
Как было только что указано в комментариях, это не совсем отвечает на вопрос. Что касается содержит - все поиск, я не думаю, что это может быть сделано без закольцовывания через вход. Хорошо то, что это можно сделать без перечисления IEnumerable рецептов
, так что приведенный ниже код все еще попадет на сервер SQL один раз, с одним запросом:
var recipes = context.Recipes.AsEnumerable<Recipe>();
ingredients.ForEach(i =>
var recipes = recipes.Where(r =>
r.IngredientList.Count(ii => ii.Id == i.Id) > 0
);
);
return recipes.ToList();
Запрос не будет выполняться до тех пор, пока не будет сбит ToList ()
.
Я использую это для запуска приложений в их собственном окне xterm (или нет) по той же ссылке.
#!/bin/bash
#
# cli_app launcher -- detects where u are launching from; gui/tty
#
dev=`/usr/bin/tty`
case $dev in
/dev/pts/0 | /dev/pts/1) xterm -e /home/user/bin/cli_app ;; ## opens gui terminal
*) /home/user/bin/cli_app ;; ## opens where u are
esac
# eof #
!find:p ......... show last find command - not execute
# create one dir and go to
echo 'mkcd() { mkdir -p "$@" && cd $_; }' >> ~/.bashrc
# backup file in single command
cp /path/too/long/to/file{,.backup}
Если вы хотите, чтобы ваш текущий рабочий каталог отображался в приглашении ( $ PS1
), используйте терминал только с 80 столбцами, а иногда и в очень глубоких иерархиях. , вы можете получить приглашение, которое займет всего около 5 символов вашей строки. В этом случае полезны следующие объявления:
PS1='${PWD##$PREFIX}$ '
PREFIX='' export PREFIX
prefix () {
PREFIX="$1"
}
prefix '*/'
Вызов префикса '* /'
установит ваше приглашение, чтобы оно содержало только последний элемент каталога вашего текущего рабочего каталога (вместо полного пути). Если вы хотите увидеть весь путь, вызовите префикс
без аргументов.