Каков Ваш единственный самый любимый прием командной строки с помощью Bash? [закрытый]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

156
задан 11 revs, 6 users 62% 5 October 2011 в 03:09
поделиться

98 ответов

У меня есть действительно глупый, но чрезвычайно полезный при навигации по глубоким древовидным структурам. Поместите это в .bashrc (или подобный):

alias cd6="cd ../../../../../.."
alias cd5="cd ../../../../.."
alias cd4="cd ../../../.."
alias cd3="cd ../../.."
alias cd2="cd ../.."
1
ответ дан neu242 23 November 2019 в 21:47
поделиться

Хотите получить последние несколько строк файла журнала?

tail /var/log/syslog

Хотите следить за файлом журнала для того, когда он изменяется?

tail -f /var/log/syslog

Хотите быстро перечитать по файлу от запуска?

more /var/log/syslog

Хотите быстро найти, содержит ли файл некоторый текст?

grep "find this text" /var/log/syslog
1
ответ дан 2 revs 23 November 2019 в 21:47
поделиться

Один из моих приемов избранного с ударом является "каналом tar". Когда у Вас есть чудовищное количество файлов для копирования от одного каталога до другого, делание "CP */an/other/dir" не работает, если количество файлов слишком высоко, и взорвите удар globber, таким образом, канал tar:

(cd /path/to/source/dir/ ; tar cf - * ) | (cd /path/to/destination/ ; tar xf - )

... и если у Вас есть netcat, Вы можете даже делать "netcat канал tar" через сеть!!

1
ответ дан edomaur 23 November 2019 в 21:47
поделиться
while IFS= read -r line; do
echo "$line"
done < somefile.txt

Это - хороший способ обработать файл линию за линией. Очистка IFS необходима для получения пробельных символов в передней стороне или конце строки. "-r" необходим для получения всех необработанных символов, включая обратные косые черты.

1
ответ дан George Liobase 23 November 2019 в 21:47
поделиться

Я плохо знаком с программированием на Mac, и я пропускаю способность запустить gui программы от удара..., таким образом, я должен создать функции как это:

function macvim
{
/Applications/MacVim.app/Contents/MacOS/Vim "$@" -gp &
}
1
ответ дан rgcb 23 November 2019 в 21:47
поделиться

Лучшие 10 команд снова (как сообщение ctcherry, только короче):

history | awk '{ print $2 }' | sort | uniq -c |sort -rn | head
1
ответ дан 2 revs 23 November 2019 в 21:47
поделиться

Хороший для того, чтобы сделать точную рекурсивную копию/резервное копирование каталога включая символьные ссылки (вместо того, чтобы следовать за ними или проигнорировать их как CP):

$ mkdir new_dir
$ cd old_dir
$ tar cf - . | ( cd ../old_dir; tar xf - )
1
ответ дан Robert Swisher 23 November 2019 в 21:47
поделиться

Переменная среды FIGNORE хороша, когда Вы хотите, чтобы заполнение клавишей Tab проигнорировало файлы или папки с определенными суффиксами, например:

export FIGNORE="CVS:.svn:~"

Использование переменная среды IFS, когда Вы хотите определить разделитель объекта кроме пространства, например:

export IFS="
"

Это сделает Вас способными циклично выполниться через файлы и папки с пробелами в них, не выполняя волшебства, как это:

$ touch "with spaces" withoutspaces
$ for i in `ls *`; do echo $i; done
with
spaces
withoutspaces
$ IFS="
"
$ for i in `ls *`; do echo $i; done
with spaces
withoutspaces
1
ответ дан 2 revs 23 November 2019 в 21:47
поделиться

Несколько лет назад я обнаружил p* команды, или получите информацию о процессах: B-дерево , pgrep, pkill, и pfiles. Конечно, родительский элемент их всех ps, но необходимо передать вывод по каналу в меньше , grep и/или awk для понимания вывода под большой нагрузкой. вершина (и варианты) помогают также.

1
ответ дан Jon Ericson 23 November 2019 в 21:47
поделиться

Некоторые самородки Bash также здесь:

http://codesnippets.joyent.com/tag/bash

1
ответ дан cykaer 23 November 2019 в 21:47
поделиться

Мне всегда нравился этот. Добавьте это к своему/etc/inputrc или ~/.inputrc

" \e [A": history-search-backward "\e [B": history-search-forward

, Когда Вы тип ls <up-arrow> это будет заменено последней командой, запускающейся с "ls" или независимо от того, что Вы вставляете.

1
ответ дан 2 revs, 2 users 92% 23 November 2019 в 21:47
поделиться

Чтобы быть в состоянии быстро отредактировать сценарий оболочки, Вы знаете, находится в Вашем $PATH (не пробуйте ls...):

function viscr { vi $(which $*); }
0
ответ дан lre 23 November 2019 в 21:47
поделиться
alias -- ddt='ls -trFld'
dt () { ddt --color "$@" | tail -n 30; }

Дает Вам новые файлы в текущем каталоге. Я использую все это время...

0
ответ дан Weidenrinde 23 November 2019 в 21:47
поделиться

Если я ищу что-то в каталоге, но я не уверен в файле, то я просто grep файлы в каталоге:

find . -exec grep whatIWantToFind {} \;
0
ответ дан user11285 23 November 2019 в 21:47
поделиться

Вы изменились на новый каталог, и хотят переместить файл от нового каталога до старого. В одном перемещении: mv file $OLDPWD

0
ответ дан tzot 23 November 2019 в 21:47
поделиться

Некоторый полезный mencoder управляет, чтобы я узнал о при поиске некоторых инструментов редактирования аудио и редактирования видео:

от .xxx до Дампа .avi

mencoder movie.wmv -o movie.avi -ovc lavc -oac lavc 

звучат от видео:

mplayer -ao pcm -vo null -vc dummy -dumpaudio -dumpfile fileout.mp3 filein.avi 
0
ответ дан Sergio Morales 23 November 2019 в 21:47
поделиться

Shell-fu - это место для хранения, проверки и распространения подсказок и приемов командной строки. Немного похоже на StackOverflow, но исключительно для оболочки. Там вы найдете множество ответов на этот вопрос.

1
ответ дан Jean-Marc Liotier 23 November 2019 в 21:47
поделиться

Поскольку мне всегда нужен для i в $ (ls ) оператор, который я сделал сокращенным способом:

fea(){
   if test -z ${2:0:1}; then action=echo; else action=$2; fi
   for i in $(ls $1);
      do $action $i ;
   done;
}

Другой:

echo ${!B*}

Он распечатает список всех определенных переменных, которые начинаются с 'B'.

1
ответ дан 23 November 2019 в 21:47
поделиться

ctrl-u удалить все написанное

1
ответ дан 23 November 2019 в 21:47
поделиться

Программируемое завершение:

Ничего особенного. Я всегда отключаю его, когда использую Knoppix, потому что он слишком часто мешает. Только некоторые базовые:

shopt -s progcomp

complete -A stopped -P '%'          bg
complete -A job     -P '%'          fg jobs disown wait
complete -A variable                readonly export
complete -A variable -A function    unset
complete -A setopt                  set
complete -A shopt                   shopt
complete -A helptopic               help
complete -A alias                   alias unalias
complete -A binding                 bind
complete -A command                 type which \
                                    killall pidof
complete -A builtin                 builtin
complete -A disabled                enable
1
ответ дан 23 November 2019 в 21:47
поделиться

Перехват сигналов:

Вы можете перехватить сигналы, отправленные процессу оболочки, и заставить их выполнять команды в своей соответствующей среде, как если бы они были введены в командной строке:

# TERM or QUIT probably means the system is shutting down; make sure history is
# saved to $HISTFILE (does not do this by default)
trap 'logout'                      TERM QUIT

# save history when signalled by cron(1) script with USR1
trap 'history -a && history -n'    USR1
1
ответ дан 23 November 2019 в 21:47
поделиться

Не совсем интерактивные уловки с оболочкой, но тем не менее можно использовать как уловки для написания хороших сценариев.

getopts, shift, $ OPTIND, $ OPTARG:

Мне нравится создавать настраиваемые сценарии:

while getopts 'vo:' flag; do
    case "$flag" in
        'v')
        VERBOSE=1
        ;;
        'o')
        OUT="$OPTARG"
        ;;
    esac
done
shift "$((OPTIND-1))"

xargs (1):

У меня трехъядерный процессор, и я люблю запускать сценарии, выполняющие сжатие, или некоторые другие последовательные операции с интенсивным использованием ЦП с набором файлов. Мне нравится ускорять его, используя xargs в качестве очереди заданий.

if [ "$#" -gt 1 ]; then
    # schedule using xargs
    (for file; do
        echo -n "$file"
        echo -ne '\0'
    done) |xargs -0 -n 1 -P "$NUM_JOBS" -- "$0"
else
    # do the actual processing
fi

Это очень похоже на make -j [NUM_JOBS] .

1
ответ дан 23 November 2019 в 21:47
поделиться

Быстрый текст

Я использую эти последовательности текста все слишком часто, поэтому я добавил к ним ярлыки .inputrc :

# redirection short cuts
"\ew":            "2>&1"
"\eq":            "&>/dev/null &"
"\e\C-q":         "2>/dev/null"
"\eg":            "&>~/.garbage.out &"
"\e\C-g":         "2>~/.garbage.out"

$if term=xterm
"\M-w":           "2>&1"
"\M-q":           "&>/dev/null &"
"\M-\C-q":        "2>/dev/null"
"\M-g":           "&>~/.garbage.out &"
"\M-\C-g":        "2>~/.garbage.out"
$endif
1
ответ дан 23 November 2019 в 21:47
поделиться

Из чистого юмора создайте пустой файл «я», а затем: $ touchself

1
ответ дан 23 November 2019 в 21:47
поделиться

Я предпочитаю читать страницы справочника в vi, таким образом, у меня есть следующее в моем .profile или .bashrc файле

man () {
    sought=$*
    /usr/bin/man $sought | col -b | vim -R -c "set nonumber" -c "set syntax=man"  -
}
0
ответ дан 2 revs, 2 users 71% 23 November 2019 в 21:47
поделиться
alias mycommand = 'verylongcommand -with -a -lot -of -parameters'
alias grep='grep --color'

находят больше чем одно слово с grep:

netstat -c |grep 'msn\|skype\|icq'
0
ответ дан 2 revs, 2 users 77% 23 November 2019 в 21:47
поделиться

Кстати история - использование загадочных каре, и т.д. не совсем интуитивно. Распечатать все объекты истории, содержащие данную строку:

function histgrep { fc -l -$((HISTSIZE-1)) | egrep "$@" ;}
0
ответ дан 2 revs, 2 users 67%lre 23 November 2019 в 21:47
поделиться
find -iregex '.*\.py$\|.*\.xml 

Поиски шаблон во всех файлах Python и всех XML-файлах и каналах результат только для чтения в сессия Vim .

| xargs egrep -niH 'a.search.pattern' | vi -R -

Поиски шаблон во всех файлах Python и всех XML-файлах и каналах результат только для чтения в сессия Vim .

0
ответ дан 2 revs, 2 users 50% 23 November 2019 в 21:47
поделиться

Я хочу упомянуть, как мы можем перенаправить главный вывод команды в файл с помощью его пакетного режима (-b)

-b-n 1 вершины $> top.out. $ (дата + %s)

По умолчанию, вершина вызывается с помощью интерактивного режима, в котором вершина работает неограниченно долго и принимает, что нажатие клавиши переопределяет, как вершина работает.

сообщение А, которое я записал, может быть найдено здесь

0
ответ дан Jadu Saikia 23 November 2019 в 21:47
поделиться

Мне нравится устанавливать подсказку, которая показывает текущий каталог в заголовке окна xterm. Это также показывает время и текущий каталог. Кроме того, если удар хочет сообщить, что фоновое задание закончилось, об этом сообщают в различном цвете с помощью escape-последовательностей ANSI. Я использую черную на свете консоль, таким образом, мои цвета не могут быть правильными для Вас при одобрении света-на-черном.

PROMPT_COMMAND='echo -e "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007\033[1;31m${PWD/#$HOME/~}\033[1;34m"'
PS1='\[\e[1;31m\]\t \$ \[\e[0m\]'

Удостоверяются, что Вы понимаете, как использовать \[ и \] правильно в Вашей строке PS1 так, чтобы удар знал, сколько времени Ваша строка приглашения на самом деле представляет на экране. Это так, это может перерисовать Вашу командную строку правильно, когда Вы перемещаетесь вне однострочной команды.

0
ответ дан Adrian Pronk 23 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

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