답변:
이것은 이 답변!!
에서 언급 된 트릭을 다소 확장 합니다. 실제로 잊혀지는 경향이있는 여러 가지 히스토리 관련 명령이 있습니다 (사람은 입력 한 명령을 찾는 대신 100 번 찌르는 경향이 있습니다 ).Up
history
명령은 왼쪽에 이벤트 지정자가있는 최근에 실행 된 명령 목록을 표시합니다.!N
이벤트 지정자와 관련된 명령을 대체합니다 N
!-N
대체됩니다 N
일 가장 최근의 명령을; 예를 들어 !-1
가장 최근의 명령, !-2
가장 최근의 두 번째 명령 등을 대체합니다 .!!
는 !-1
마지막 명령을 빠르게 대체하기 위해 속기입니다 .!string
로 시작하는 가장 최근의 명령을 대체합니다 string
!?string?
포함하는 가장 최근의 명령을 대체합니다 string
단어 지정자를 !
기록 명령 에 추가 하여 결과를 수정할 수 있습니다. 콜론은 이벤트와 단어 지정자를 분리합니다 (예 :) !!:0
. 이벤트 지정 자는 단어 지정자를 사용할 때만 !!
축약 될 수 !
있으므로 다음 !!:0
과 같습니다 !:0
.
!:0
실행 된 명령을 얻을 것이다!:1
첫 번째 인수 (및 !:2
두 번째 등) 를 얻습니다 .!:2-3
두 번째와 세 번째 인수를 얻을 것이다!:^
첫 번째 인수를 얻는 또 다른 방법입니다. !:$
마지막을 얻을 것이다!:*
모든 인수를 얻을 것이다 (하지만 하지 명령)!
각 명령 앞에 콜론이 붙은 히스토리 명령에 수정자를 추가 할 수도 있습니다 . 임의의 숫자가 쌓일 수 있습니다 (예 :) !:t:r:p
.
h
-기본 파일 이름으로 정렬t
-기본 파일 이름 만r
-파일 이름 확장자에 맞춰e
-파일 이름 확장자 만s/search/replacement
- 처음 나타나는 교체 search
와를replacement
gs/search/replacement
- 모든 항목 바꾸기 search
로replacement
!-#
. !string
문자열로 시작하는 마지막 명령을 실행하는 데 사용 하지만 일반적으로 올바른 탭을 먼저 실행하여 (zsh) 완료합니다.
!N
하면 명령이 실행 됩니다 ..."는 너무 좁은 설명입니다. 실제로 !N
는 다음 명령으로 대체됩니다 ...; 답변의 모든 설명에 대해서도 마찬가지입니다. 더 정확하고 훨씬 더 유용한 가능성을 열어보세요! 예를 들어 sudo !!
.
bash
; Emacs에서 입력 명령 및 값 기록을 탐색하려면 (Mx 또는 기타 읽기 값의 경우) 대신 Meta-R을 사용하십시오 (Meta-R은 eshell
Emacs 에서도 사용됨 ). 그래서 나는 종종 그들을 엉망으로 만듭니다.
bash-선행 줄의 최종 매개 변수 삽입
alt- . 가장 유용한 키 조합, 시도해보십시오. 어떤 이유로 든 아무도 이것에 대해 알지 못합니다.
이전의 마지막 매개 변수를 선택하려면이 키를 반복해서 누릅니다.
방금 전에 사용한 인수 / 파일에 대해 더 많은 작업을 수행 할 때 유용합니다.
alt
- .
그것은 이전 명령에 가서에서 마지막 인수를 가져옵니다. 따라서 세 명령의 마지막 인수를 원하면 alt
- .
세 번 누르십시오 .
yank-last-arg
readline 명령 의 기본 키 바인딩 이므로 BASH 또는 ZSH뿐만 아니라 readline에 연결된 모든 프로그램에서 작동해야합니다.
내가 가장 좋아하는 것은
man 7 ascii
간단하고 매우 유용합니다.
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
042 34 22 " 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
047 39 27 ' 147 103 67 g
050 40 28 ( 150 104 68 h
051 41 29 ) 151 105 69 i
052 42 2A * 152 106 6A j
053 43 2B + 153 107 6B k
054 44 2C , 154 108 6C l
055 45 2D - 155 109 6D m
056 46 2E . 156 110 6E n
057 47 2F / 157 111 6F o
060 48 30 0 160 112 70 p
061 49 31 1 161 113 71 q
062 50 32 2 162 114 72 r
063 51 33 3 163 115 73 s
064 52 34 4 164 116 74 t
065 53 35 5 165 117 75 u
066 54 36 6 166 118 76 v
067 55 37 7 167 119 77 w
070 56 38 8 170 120 78 x
071 57 39 9 171 121 79 y
072 58 3A : 172 122 7A z
073 59 3B ; 173 123 7B {
074 60 3C < 174 124 7C |
075 61 3D = 175 125 7D }
076 62 3E > 176 126 7E ~
077 63 3F ? 177 127 7F DEL
이 웹 사이트 commandlinefu.com을 살펴보십시오 .
Peteris Krumins의 블로그에서이 4 가지 기사를 볼 수도 있습니다.
ascii
프로그램 도 유용합니다. 테이블을 인쇄하는 것 외에도 하나 이상의 개별 문자를 쿼리 할 수 있습니다.
이것이 "속임수"로 계산되는지 확실하지 않지만 사람들은 표준 readline 단축 키를 잘 모르는 것 같습니다. 쉘에서 특히 사용 :
Ctrl+L
FormFeed ASCII 문자에 해당합니다. 일반적으로 화면 창 (예 : vim, less, mc 등)이있는 텍스트 응용 프로그램에서 화면을 다시 그립니다. 화면이 다른 프로그램의 일부 출력에 의해 "오염"된 경우에 좋습니다.
CTRLRBASH에서 + 이전에 실행 된 명령 (~ / .bash_history의 내용)을 검색 / 활성화합니다.
이것은 종종 매우 도움이됩니다. 이 별명을 실행하면 포트 8000에서 HTTP (인덱싱 된)를 통해 PWD를 제공합니다.
alias webserver="python -m SimpleHTTPServer"
그리고 나는 항상 make를 실행하고 spaz out하고 너무 빨리 입력하기 때문에이 별칭은 아마도 가장 많이 사용됩니다.
alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make
그리고 아마도 가장 많이 사용되는 BASH는 업로드라고 부르는 간단한 스크립트 일 것입니다. 나는 그것을 사용하여 Linode에 모든 종류의 컨텐츠를 블리 팅하고 결과 HTTP URL을 클립 보드에 복사합니다 (중간 클릭). IRC의 사람들에게 물건을 붙여 넣는 데 매우 유용합니다.
scp -r $* $user@$host:public_html && {
URL="http://$host/~$user/$(basename $1)"
echo "$URL"
xselection -replace PRIMARY "$URL"
}
그냥 몇 나중에 더 게시 할 수 있습니다. 다시 일해야합니다!
alias mk=make
입력 속도가 빠르고 잘못 될 가능성이 줄어 듭니다. 또는 핫키를 사용하여 편집기에서 컴파일하십시오.
alias m=make
하거나 심지어 m=make -j6
비슷하거나 유사합니다.alias m=mutt
버팀대 확장 :
중괄호 확장은 임의의 문자열을 생성 할 수있는 메커니즘입니다.
다음과 같이 지루한 줄을 바꿀 수 있습니다.
mv loong/and/complex/file/name loong/and/complex/file/name.bacukup
더 짧은 인스턴스
mv loong/and/complex/file/name{,backup}
다른 용도
# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}
# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share
산술 확장 :
산술 확장을 통해 산술 표현식을 평가하고 결과를 대체 할 수 있습니다. 산술 확장 형식은 다음과 같습니다.
$((expression))
표현식은 큰 따옴표 안에있는 것처럼 처리되지만 괄호 안의 큰 따옴표는 특별히 처리되지 않습니다. 표현식의 모든 토큰은 매개 변수 확장, 문자열 확장, 명령 대체 및 따옴표 제거를 거칩니다. 산술 확장이 중첩 될 수 있습니다.
$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
foo[123]
확장 할 수 있는 더 컴팩트 한 것도 foo1 foo2 foo3
있지만이 경우 작동하려면 파일 이름이 필요합니다
이것은 일반적으로 시작 스크립트 (.bashrc, .profile 등)에 있습니다.
shopt
좋은 점, 의견을 확인하십시오 :
shopt -s cdspell # try to correct typos in path
shopt -s dotglob # include dotfiles in path expansion
shopt -s hostcomplete # try to autocomplete hostnames
: 키 입력을 저장 별칭
mkdir
과 cd
그것으로를 :
mkcd () { mkdir -p "$@" && cd "$@"; }
그리고 마지막으로, 나는 tar 구문을 암기하는 것을 포기했습니다.
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
mkcd
id라는 이름 과 비슷한 기능을 가지고 있습니다 md
. 그러나 "$ @"를 cd의 인수로 사용하면 둘 이상의 단일 디렉토리로 cd 할 수 없으므로 의미가 없습니다. "$ @"는 mkdir에 대해 작동하지만 mkdir과 cd에 대해 다른 인수를 처리하고 있으므로 오히려 제안합니다.md () { mkdir -p "$1"; cd "$1" }
많은 키 입력을 저장하는 두 개의 bash 함수.
CD가 성공한 후 자동으로 ls를 수행하십시오.
function cd {
builtin cd "$@" && ls
}
n 레벨 위로 이동 :
# Usage .. [n]
function .. (){
local arg=${1:-1};
local dir=""
while [ $arg -gt 0 ]; do
dir="../$dir"
arg=$(($arg - 1));
done
cd $dir #>&/dev/null
}
builtin foo
함수가 정의되어있는 것을 회피 할 수 있다는 것을 결코 깨닫지 못했다 cd
. chdir
내 기능 에 사용 하고 있습니다. 핸디
cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
검색을 원하기 전에 일반적으로 명령 줄의 중간에 있기 때문에 (bash의 CTRL-R) 내 .bashrc에 다음이 있습니다.
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
이것은 내가 cd를 입력 한 다음 위 / 아래로 누르면 CD에 있던 모든 옵션을 볼 수 있음을 의미합니다. 기본적으로 나는 이것을 자주 사용되는 dirs에 사용합니다. "cd w"와 같이 나는 많이 사용하는 모든 작업 공간을 거치게됩니다.
많은 시간을 절약 할 수있는 것은 푸시 / 팝 명령입니다. 이 사람들을 사용하면 디렉토리 스택을 만들고 많이 입력하는 것을 줄일 수 있습니다.
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
u
하고 o
여기에 대한 서?
setopt autopushd
모든 디렉토리 변경 사항이 자동으로 적용됩니다.
screen
명령 . 기본적으로 당신이 돌아올 때 명령 행 세션을 저장합니다. 창 관리자와 같은 일종의 터미널 관리자입니다. 이렇게하면 단일 터미널 세션에서 여러 개의 가상 터미널을 진행할 수 있습니다. 정말 멋있어.
을 사용 screen
하면이 쉘 함수 (에 넣음 .bashrc
)가 매우 유용합니다.
function scr {
if screen -ls | grep -q Main; then
# reattach to Main:
screen -xr Main
else
# name session "Main":
screen -S Main
fi
}
를 입력 scr
하면 기본 세션이 존재하는지 확인하고 연결됩니다. 그렇지 않으면 생성됩니다.
빠른 타이피스트라면 편리합니다.
alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'
이 매크로는 파일 크기, 바이트, 패킷 등 출력 열의 총계를 계산하는 데 도움이됩니다. 추가 할 열을 지정하기 만하면됩니다.
total ()
{
if [ x$1 = x ]; then set `echo 1`; fi
awk "{total += \$$1} END {print total}"
}
예를 들어 인수없이 다음과 같이 사용하면 첫 번째 열의 합계가 추가됩니다.
du | total
인수를 제공하면 해당 열을 합산합니다. 예를 들어 / tmp의 모든 C # 파일에 사용 된 총 바이트 수를 나타냅니다.
ls -l /tmp/*cs | total 5
이진 파일 (예 : cat / bin / ls)을 실수로 보았 기 때문에 콘솔이 엉망이되는 경우 다음 셸 기능으로 터미널을 복원 할 수 있습니다.
restaura ()
{
perl -e 'print "\e)B";'
}
나는 ls가 문자를 사용하여 파일 클래스를 구별하고 편집기에서 생성 된 백업 파일을 숨기고 싶습니다 (백업 파일은 ~ 문자로 끝남).
alias ls='ls -FB'
s/fast/sloppy/
reset
당신이 사용 하는 곳을 사용 restaura
합니다.
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.
내가 잊었을 때 가장 좋아하는 것 중 하나 s
:
$ s !! # last command with super user priviledges
bindkey -s '\e[12~' "sudo !!\n"
(이 경우) F2를 바인딩하여 해당 명령을 실행할 수 있습니다. 나는 그 바인딩을 가지고 있기 때문에 내가 무언가를 실행하고 "당신은 '스 도우를 잊어 버렸다", 바보를 잊어 버렸다 "오류 메시지를 볼 때, 나는 성가신 F2를 찌를 수있다
명령이 stdin 입력을 받으면을 사용하여 파일에서 입력을 읽을 수 있습니다 <filename
. 이것은 명령의 어느 곳에 나 나타날 수 있으므로 다음 행은 동일합니다.
cat filename
cat <filename
<filename cat
이것은 grep에 특히 유용합니다. 행의 끝에 표현식을 배치 할 수 있으므로 Up파일 이름을 지나기 위해 왼쪽으로 스크롤 할 필요없이을 누르면 grep 명령을 빠르게 수정할 수 있습니다 .
<filename grep 'expression'
<input foo | bar | baz >output
에 일부 셸 루핑 프리미티브에서 혼합을 시도하면 작동하지 않습니다 . 그래서 나는 포기하고 컨벤션에 따라 끝까지 넣었습니다. while
for
다음 CDPATH
과 같은 디렉토리를 설정하는 데 사용할 수 있습니다 PATH
. 만약 당신이 시도 하고 현재 디렉토리에 cd foo
없다면 foo
, 쉘은 그 디렉토리를 CDPATH
찾을 때 각각의 디렉토리를 검사 foo
하고 가장 먼저 찾은 디렉토리로 전환합니다.
export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
vi `which scriptname`
당신이 무언가가 어디에 있는지 알지 못하고 신경 쓰지 않을 때.
which
자동으로 호출 할 수 있습니다.vi =scriptname
$(scriptname)
앰퍼샌드 . 백그라운드에서 명령을 입력하므로 계속 입력 할 수 있습니다.
$> sudo updatedb &
함께 일하고 잠시 후 다음을 보게됩니다.
[1] 17403
그리고 당신의 과정은 끝났습니다! 종료 될 때까지 기다릴 필요가없는 경우에 좋습니다.
&!
배경에 작업을 하고 쉘에서 그것을 부인!
bash
.
nohup
이 작업이 수행됩니다.
탭 완성 . 모든 경로의 모든 문자를 입력해야한다면 얼마나 나쁜가?
rm -fr /
됩니다. 네, 탭 완성은 매우 중요합니다 ...
ls /usr/lib/game-d*/rott*
rm -rf /
대부분의 Linux 시스템에서 비활성화 되지 않습니까?
마지막으로 마운트 된 장치 마운트 :
mount /media/whatever
...
u!mo
!mo
mo
적어도 bash에서 시작한 마지막 명령으로 확장됩니다 . 때로는 mv
중간에 있기 때문에 u!m
자주 작동하지 않습니다.
나는 이것을 .bashrc에 가지고있다.
#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'
function find-all() {
python -c "import re
import sys
for i in re.findall('$1', sys.stdin.read()):
if type(i) == type(''):
print i
else:
print i[0]"
}
그리고 클립 보드에 HTML 소스 코드가 있고 사용하는 모든 링크를 찾으려면
c-v | find-all 'href="([^"]*)"' | c-c
그리고 클립 보드에 모든 URL이 있습니다.
나는 또한이 기능을 가지고
function lsq(){
ls -lh $@ | tr -s ' ' | cut -d' ' -f5,8
}
표시 크기 (사람이 읽을 수있는) 및 파일 이름입니다.
alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'
이 별명은 온도 표시 용입니다.
function separate() {
python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}
이 함수를 사용하면 제품 또는 인수 합계를 계산할 수 있습니다.
alias sum='separate + | bc'
alias product='separate * | bc'
function split-join() {
python -c "import sys,re; print '$2'.join(re.split('$1', sys.stdin.read().strip()))";
}
이것은 표준 입력을 정규식으로 분리 한 다음 결과를 결합하는 유용한 기능입니다.
function factorial() {
seq -s* $1 | bc
}
계승 함수
function wiki() { dig +short txt $1.wp.dg.cx; }
이 기능은 DNS를 통해 위키 텍스트를 표시합니다
나는 또한 세 가지 색상 기능이 있습니다
function blue() {
echo -e "\x1b[34m\x1b[1m"$@"\x1b[0m";
}
function green() {
echo -e "\x1b[32m\x1b[1m"$@"\x1b[0m";
}
function red() {
echo -e "\x1b[31m\x1b[1m"$@"\x1b[0m";
}
function md5check() {
test `md5sum $2 | cut -d' ' -f1` = "$1" && green [OK] || red [FAIL]
}
이 함수는 파일 md5 해시를 확인합니다.
이것은 주어진 코드에 대한 오류 메시지를 표시합니다
function strerror() { python -c "import os; print os.strerror($1)"; }
당신은 모든 메시지를 인쇄 할 수 있습니다
alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
또 다른 유용한 ZSH 트릭 :
명령 출력을 파일로 취급하십시오.
emacs =(hg cat -r 100 somefile)
구문 강조 표시를 위해 이전 버전의 Mercurial 추적 파일을 emacs로 엽니 다. 그없이, 나는 주변에 엉망 것 hg revert
, hg archive
또는 명시 적으로 보낼 hg cat
임시 파일에 출력합니다.
물론 이것은 파일을 여는 모든 프로그램과 표준 출력으로 인쇄하는 모든 프로그램에서 작동합니다.
zsh을 특정 기능을 제공하여 설정 접미사 별명이다 플래그 :alias
-s
alias -s ext=program
주어진 확장자에 접미사 별명이있는 경우 해당 확장자를 가진 파일을 직접 실행할 수 있으며 ZSH는 주어진 프로그램을 시작하고 파일 이름을 인수로 전달합니다. 따라서 위의 별칭이 적용되면 다음 행은 동일합니다.
/path/to/foo.ext
program /path/to/foo.ext
내가 가장 좋아하는 ZSH 기능 중 하나는 디렉토리입니다. 특정 이름을 가진 변수를 특정 경로를 가리키는 값으로 내보낼 수 있습니다.
export foo=/usr/bin
이제 ~foo
명령에서 다음을 참조 할 수 있습니다 /usr/bin
.
cd ~foo
~foo/ls
cat ~foo/filename
이 질문을 참조하십시오 .
실행할 때 ps ax | grep string
:
[steve@sage-arch ~]$ ps ax | grep 'openbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
5100 pts/0 S+ 0:00 grep openbox
마지막 줄 grep
은 약간 성가신 것입니다.
다음을 실행하여이를 제거 할 수 있습니다 ps ax | grep '[s]tring'
.
[steve@sage-arch ~]$ ps ax | grep '[o]penbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
업데이트 : 또는 그냥 실행pgrep string
'[o]penbox'
)를 인용해야합니다 . 대괄호는 일종의 glob처럼 작동하므로 디렉토리에 openbox가있는 경우 (예 /usr/bin
:) bash는 openbox를 사용하여 grep 트릭을 방지합니다.
아무것도 실시하지 않는 명령 :
에서와 같이
while :; do :; done
for 루프와 함께 브레이스 확장 :
for c in {1..3}; do :; done
!
연산자와 단락 연산자 ||
및&&
[ -d /tmp/dir ] || mkdir /tmp/dir
if ! ping 34.41.34.1; then :; fi
팝 / 푸시 대신 하위 쉘 사용 (스크립트에서 편리함)
~$ ( cd /tmp; echo $PWD )
/tmp
~$
더 -의 종류 - 어떤 명령type
~$ type type
type is a shell builtin
~$ type ls
ls is aliased to `ls --color=auto'
~$ f(){ :; }
~$ type f
f is a function
f ()
{
:
}
또한 아주 좋은 : here-strings
~$ cat <<<"here $PWD"
here /home/yourname
~$
그리고 내가 좋아하는 것 : 명령 목록에서 리디렉션
{ w; ps; ls /tmp; } 2>/dev/null |less
나는 PS1에 가능한 한 많은 것을 척킹하는 것을 좋아합니다. 기억해야 할 유용한 사항 :
\e[s
\e[u
커서 위치를 각각 저장 하고 저장하십시오. 나는 이것을 사용하여 화면 상단에 '정보 표시 줄'을 만들고 몇 줄을 더 길게 만들 수 있습니다. 예:
PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t \j / \! / \#\[\e[u\e[0m\e[33;1m\][\u@\h \[\e[34m\]\W]\[\e[0m\]\$ '
와 결합하십시오 alias clear='echo -e "\e[2J\n"'
. 사용해보십시오!
또한 PROMPT_COMMAND
변수는 PS1 전에 매번 실행할 명령을 정의합니다.
다른 하나는 bg
명령입니다. &
명령의 끝 을 잊어 버린 경우를 누르고 ^Z입력 bg
하면 백그라운드에서 실행됩니다.
bg
합니다. 백그라운드에서 프로그램을 실행하고 실수로 누르면 프로그램 fg
을 다시 밀어 넣는 방법을 모르겠습니다. D
PS1
좋아해서 내가 원하는 것을 대부분 내 스크린 하단에 넣었다.