お気に入りのコマンドライン機能やトリックは何ですか?


94

Unix / Linux用のコマンドライン機能とトリックを共有します。可能であれば、シェル/ディストリビューションに依存しないようにしてください。エイリアス、ワンライナー、キーボードショートカット、小さなシェルスクリプトなどに興味がある

回答:


89

これはこの答えで!!言及されたトリックを幾分広げています。実際には、忘れられる傾向のある履歴関連のコマンドがたくさんあります(人々はUp100回刺す傾向があり、代わりに入力したコマンドを探します)。

  • historyコマンドは、左にイベント指示で、最近実行したコマンドの一覧が表示されます
  • !N イベント指定子に関連付けられたコマンドを置き換えます N
  • !-N代用しますN 番目の最も最近のコマンドを。たとえば!-1、最新のコマンド、!-22番目に新しいコマンドなどを置き換えます。
  • 他の答えで述べたように、最後のコマンドをすばやく置き換える!!ための短縮形です!-1
  • !string で始まる最新のコマンドを置き換えます string
  • !?string? を含む最新のコマンドを置き換えます string

単語指定子を!履歴コマンドに追加して、結果を変更できます。コロンは、イベントと単語指定子を区切り!!:0ます。イベント指定子!!!、単語指定子を使用する場合にのみ短縮できます。これ!!:0はと同等!:0です。

  • !:0 実行されたコマンドを取得します
  • !:1最初の引数(および!:22番目など)を取得します
  • !:2-3 2番目と3番目の引数を取得します
  • !:^最初の引数を取得する別の方法です。!:$最後になります
  • !:*すべての引数を取得します(コマンドは取得しません

修飾子を!履歴コマンドに追加することもできます。各修飾子の先頭にはコロンが付きます。任意の数を積み重ねることができます(例:)!:t:r:p

  • h -ベースファイル名まで整列
  • t -ベースファイル名のみ
  • r -ファイル名の拡張子に合わせて
  • e -ファイル名拡張子のみ
  • s/search/replacement-最初に出現交換searchとをreplacement
  • gs/search/replacement-すべての出現箇所searchreplacement

3
また、Bashを使用している場合(特定の他のシェルでも同じかもしれません)、M- ^(Meta- ^)は、実際に参照しているものを見たい場合に備えて、上記の履歴展開演算子を展開しますに。
エリックスミス

1
の使用法を見つけたことがありません!命令する。表示されていないコマンドを実行することは、私には悪いようです。!-4の代わりに!-3を入力するのはとても簡単で、誰が何が起こるか知っています。私が実行したいコマンドの行番号を見つけることは、通常、それが価値があるよりも苦痛です。しかし、クールなトリックですが、私はそれらの本当の用途を見つけたことがありません。
ファルマーリ

1
@Falmarri !-#どちらも使用しません。私が使うのですか!string、それは私が正しいことを実行していることを確認する(zshの)最初の文字列で始まる最後のコマンドを実行するために、私は一般]タブ-完全
マイケルMrozek

1
番号!:)「実行!Nするとコマンドが実行されます...」という記述は狭すぎます。実際に!Nは、コマンドによって置き換えられます...; 回答のすべての説明についても同様です。より正確で、はるかに有用な可能性を開きます!例えば、言及されたsudo !!
imz-イヴァンザカリヤシェフ

1
文字列で検索された以前のコマンドを実行するには、通常Ctrl-Rを押します。複数のCtrl-Rを使用すると、履歴をより深く掘り下げることができます。これにより、見つかったコマンドがすぐに表示され、それを破棄してさらに調べることができます。Ctrl-Gはこのモードからエスケープします。唯一の不便な点は、Ctrl-Rがforであるということbashです。Emacsでは、入力コマンドと値の履歴(Mxまたはその他の読み取り値)を参照するには、代わりにMeta-Rを使用しますeshell(Emacs ではMeta-Rも使用されます)。だから私はしばしばそれらを台無しにします。
imz-イヴァンザカリヤシェフ

65

bash-前の行の最終パラメーターを挿入

alt- . これまでで最も便利なキーの組み合わせ。試してみてください。何らかの理由で誰もこのキーを知りません。

何度も何度も押して、古い最後のパラメーターを選択します。

少し前に使用した引数/ファイルに対してさらに何かをしたいときに最適です。


11
!$を使用して、前のコマンドの最後の引数を参照することもできます。これは、スクリプトでもインタラクティブに機能するため便利です。(bashとzshで動作)

4
あなたがヒットするたびにalt- .それは前のコマンドに行き、そこから最後の引数を引き出します。あなたは三つのコマンド前から最後の引数をしたいのであれば、単にヒットalt- .3回。
クリー

2
これはyank-last-argreadlineコマンドのデフォルトのキーバインディングであるため、BASHやZSHだけでなく、readlineにリンクされているプログラムで動作するはずです。
ジェームズ・スニーリンガー

viのモードでは、私はこの答えは1としてヤンク-最後-argを再バインドする必要がありました:superuser.com/questions/18498/...
Jeromy Anglim

xtermでは、meta-。®を生成しますが、metaの代わりにescを使用できます(bashでは一般的です)代わりに。
デロバート

49

私のお気に入りは

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

このWebサイトcommandlinefu.comをご覧ください。

また、Peteris Kruminsのこれら4つの記事を彼のブログで見ることができます。


2
別のascii プログラムも便利です。テーブルを印刷するだけでなく、1つ以上の個々の文字を照会できます。
マシューフラッシェ


42

これが「トリック」としてカウントされるかどうかはわかりませんが、人々は標準のreadlineホットキーをあまり知らないようです。シェルで特に使用するもの:

  • Ctrl+ U-現在の行を切り取ります
  • Ctrl+ Y-でラインカットを貼り付けCtrl+U
  • Ctrl+ L-画面をクリアし、現在の行を再描画します
  • Ctrl+ G-新しい行を取得し、現在の行を放棄する

5
これらにいくつか追加するだけです。Ctrl+ Aで行の先頭に移動し、Ctrl + Eで行の末尾に移動し、Ctrl-Kでカーソルから行の末尾に移動します。
ルアレス

Ctrl+LFormFeed ascii文字に対応します。通常、画面ウィンドウ(vim、less、mcなど)を使用してテキストアプリケーションで画面を再描画します。画面が別のプログラムからの出力によって「汚染」されている場合は素晴らしい。
hlovdal

ホットキーのリストへの追加:Ctrl+W1ワード後方にカット、1ワードAlt+F前方Alt+Bに移動、1ワード後方に移動 私は好きだCtrl+YShift+Insert、あなたは2つのコピーされた行を持つことができるので。1つCtrl+U(で貼り付けCtrl+Y)と同時に、別の単語をコピー(行を選択)して(Shift+Insert)で貼り付けます。

36

CTRL+ R以前に実行されたコマンド(〜/ .bash_historyの内容)を検索/アクティブ化するためのBASHの+ 。

これはしばしば非常に役立ちます。このエイリアスを実行すると、ポート8000​​でHTTP(インデックス付き)を介してPWDが機能します。

alias webserver="python -m SimpleHTTPServer"

そして、私は常にmakeを実行していて、あまりに速く入力して入力するので、これらのエイリアスはおそらく(真剣に)最もよく使用されます:

alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make

そして、おそらく私の最も頻繁に使用されるBASHは、uploadと呼ばれる単純なスクリプトです。これを使用して、あらゆる種類のコンテンツをLinodeにブリットし、結果のHTTP URLをクリップボードにコピーします(中央クリック)。IRCのユーザーにアイテムを貼り付けるのに非常に便利です。

scp -r $* $user@$host:public_html && {
    URL="http://$host/~$user/$(basename $1)"
    echo "$URL"
    xselection -replace PRIMARY "$URL"
}

ほんの数人。後でもっと投稿できるので、仕事に戻らなければなりません!


8
alias mk=make入力が速く、間違えにくい。それとも...ホットキーを使用して、エディタからコンパイル
ラースHaugseth

BTW Zshには、単純なタイプミスを修正するのに非常に優れたスペル修正機能が組み込まれています。
アダムByrtek

また、zshでは、デフォルトでは、上キーを押すと、ctrl rを押したかのように履歴検索を行います。デフォルトではないかもしれませんが、それは設定です。
ファルマーリ

私は検討したいalias m=make、あるいはm=make -j6または類似-私はすでに使用以外alias m=mutt☺を
jmtd

31

diff 一時ファイルを手動で作成せずに2つのコマンドの出力(bash):

diff <(ls dir1) <(ls dir2)

これはcommファイルのみを使用するためにも非常に便利ですが、多くの場合、それはiノードの無駄です。
マーチン

30

かなり基本的ですが、人々は知らないようで、前のディレクトリに戻ります:

cd -

私は、あなたを教えてcd..... DOSは私の筋肉の記憶に染み付いているから
LawrenceC

しかしこれはのpushdとPOPDの安価なバージョンです...
ロバートMassaioli

同様に、cd(引数なしで)ホームディレクトリに移動します。
メイ

ええ、それはクレイジーです。manページのどこに「-」の展開が表示されていますか?私は常にpushd / popdを使用しようとしています(そして忘れています)
チャックR

29

ブレースの拡張

ブレース展開は、任意の文字列を生成するメカニズムです。

次のような退屈な行を置き換えることができます。

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

3
いいですね、これを忘れたなんて信じられません。そこよりコンパクトでもありますfoo[123]に展開されますfoo1 foo2 foo3が、彼らはそのような場合には動作するようにファイル名である必要はあり
マイケルMrozek

hehe ..ありがとう...毎日何かを学ぶ+1
ステファン

29

これは通常、スタートアップスクリプト(.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
}

5
+1、なぜ私はそれを考えなかったのですか?(抽出)
MAK

mkcdidに名前を付けることだけに似た機能がありmdます。ただし、cdの引数として「$ @」を使用することは意味がありません。複数の単一のディレクトリにcdできないためです。「$ @」はmkdirで機能しますが、mkdirとcdで引数を異なる方法で処理しているため、むしろお勧めしますmd () { mkdir -p "$1"; cd "$1" }
hlovdal

これらのコマンドを追加するにはどうすればよいですか?.bashrcにそのまま貼り付けるか、それらの前に「エイリアス」を追加しますか?
アサフ

22

多くのキーストロークを節約する2つの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
}

4
builtin foo関数が定義されているのを回避するためにあなたができることに気づいたことはありませんcd。私はchdir自分の関数で使用しています。ハンディ
マイケル・

驚くばかり。cd関数のlsに-Fを追加するだけで完璧です(私にとっては)。
狂気

2
cdについても同じことを行いますが、いくつかの健全性チェックを追加して、非対話モードでlsを実行しないようにしますcd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
。– jmtd

17

私は通常、検索する前にコマンドラインの途中にいるので(bashのCTRL-R)、. bashrcに次のものがあります

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

つまり、cdと入力してから上下に押すと、cdしたすべてのオプションが表示されます。基本的に私はこれを頻繁に使用されるディレクトリに使用します。「cd w」のように、私はよく使うすべてのワークスペースに行き着きます。


これは本当に素晴らしいです!基本的な機能を損なうことなく、矢印の動作を拡張します。ありがとう!
philfr

17

時間を大幅に節約できるのは、pushd / popdコマンドです。これらの人は、ディレクトリのスタックを作成し、入力を大幅に減らすことができます:

/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make

2
はい!エイリアスu = pushd; エイリアスo = popd
缶詰霊長類

2
...そして何uoここのために立ちますか?
-deizel

@deizel:特定のものは何もありません。入力を避けるためのショートカットです。
アダムByrtek

2
コマンドの2番目の文字のように見えます。両方ともpで始まるため、両方に使用することはできません。
camh

ZSHでは次のことができますsetopt autopushdし、すべてのディレクトリの変更に自動的にプッシュします
マイケルMrozek

14

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すると、メインセッションが存在するかどうかを確認し、それに接続します。それ以外の場合は、作成されます。


技術的には、「コマンド」ではなく、独自のプログラムです。
unperson325680

1
画面上でtmuxまたはdvtmをお勧めします。彼らはより近代的でクリーンな代替品です。
deltaray

はい、「tmux」は間違いなく画面よりもはるかに優れています。
ColinM

また、直観的ではない短縮名のUNIX規約に、より厳密に
準拠してい

13

bashで特に長いコマンドラインを編集する必要がある場合

^X^E (Ctrl-X Ctrl-E) 

エディター($ EDITOR)で開きます。

zshでは、これを.zshrcに追加することで同じ動作を得ることができます。

autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line 

うわー、それは本になります。
l0b0

ええ、私のメモに!
jyz

12

あなたが速いタイピストなら、これらは便利です:

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'

忘れないでください:alias gerp = 'grep --color = tty'私はいつもそうしています;-)
ロバートスウィッシャー

1
私が懸念している限り、「高速」は正確でないとカウントされません。GREP_COLORSおよびGREP_OPTIONS変数を確認することもできます。
アンディレスター

2
s/fast/sloppy/
ジョシュ

1
resetはあなたが使用する場所を使用しますrestaura
jmtd

11
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.

忘れたときのお気に入りの1つs

$ s !! # last command with super user priviledges

2
ZSHを使用するbindkey -s '\e[12~' "sudo !!\n"場合は、F2をバインド(この場合)して、そのコマンドを実行するなどのことができます。私が結合することを持っているので、私は何かを実行したときに、私はちょうど迷惑でF2で刺すことができ、エラーメッセージ「あなたは忘れてしまった『sudo』をだます」を参照してください
マイケルMrozek

悪いF2キー...。)
Eimantas

私はこれをいつも使います。hostsファイルを編集する前に、sudoと入力することを常に忘れています。その場合は、sudo !!を実行します。+1
ブライアンウィギントン

10

コマンドがstdin入力を受け取る場合、を使用してファイルから入力を読み取ることができます<filename。これはコマンド内のどこにでも現れる可能性があるため、これらの行は同等です。

cat filename
cat <filename
<filename cat

これはgrepにとって特に便利です。行末に式を配置できるためUp、ファイル名を通過するために左にスクロールする必要なく、を押すことでgrepコマンドをすばやく変更できます。

<filename grep 'expression'

3
良いヒントです!これは実際にはコマンドの引数を並べ替えないことに注意してください。代わりに、ファイルをプロセスのSTDINにパイプします。grepにはファイル引数がないため、デフォルトではSTDINからの読み取りになります。これを理解すると、他のコマンドでこの手法を使用する多くの機会が開かれ、物事が期待どおりに機能しない場合に何が起こっているかを理解するのに役立ちます。詳細については、パイプとリダイレクターを検索してください:dsj.net/compedge/shellbasics1.html
チリトム

@chill良い点; 先端は実際には非常に不十分に表現されており、本質的に間違っています。あなたのコメントに基づいて書き直した
マイケルMrozek

最近見つけたもの:入力をループにリダイレクトできます(for、whileなど)。faqs.org/docs/abs/HTML/redircb.htmlを参照してください。
ルーカスジョーンズ

通常、リダイレクトは最後に行います。パイプラインのメタファーはでより良く見えますが<input foo | bar | baz >output、シェルループプリミティブのような、whileまたはfor途中でミキシングしようとするとうまくいきません。だから私はあきらめて、慣例に従って最後にそれを置いた。
jmtd

@jmtdまあ、それを最後に置くと、「これはgrepに特に便利です。行の最後に式を配置できるので、スクロールせずにUpを押すことでgrepコマンドをすばやく変更できます。 「ファイル名を乗り越えるために、左
マイケルMrozek

9

を使用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

3
これにより問題が発生する可能性があります。softpanorama.org/Scripting/Shellorama/cdpath.shtmlを参照してください「$ CDPATHが設定されている場合、cdビルトインは現在のディレクトリを暗黙的に追加しません。これは、有効なディレクトリ名を構築できない場合、cd cdの引数として指定された名前と同じ名前のディレクトリが現在のディレクトリに存在する場合でも、$ CDPATHのエントリの数。」私はこれに噛まれ、いくつかのMakefileが動作しなくなりました。追加中。しかし、明示的には役立つかもしれませんが、それにはいくつかの問題もあります。
-ustun

9
vi `which scriptname`

あなたが何かがどこに住んでいるかわからないとき、そしてあなたも気にしません。


8
ZSHの機能をプラグインし続けるつもりはありませんが、他の人が答えるときと同じように考えています:)。ZSHでは、起動する= FOOを行うことができますwhichので、自動的にvi =scriptname
マイケルMrozekは

バックティックキャラクターの検索に問題がある場合は、使用することもできます$(scriptname)
パトリック

9

アンパサンド。コマンドをバックグラウンドで実行するため、入力を続行できます。

$> sudo updatedb &

一緒に作業し、しばらくすると次のように表示されます:

[1] 17403

これでプロセスは完了です!終了するのを待つ必要がない場合に最適です。


11
また、アプリがGUIである場合は、おそらく仕事に残したくないでしょう。追加&!の背景に仕事をし、シェルからそれを見捨て!
unperson325680

@progo:それは私にとってはうまくいきませんbash
ネイサンオスマン

@ジョージ。あなたは正しいようです。zshがそれをサポートしていることを知りましたが、後でbashもサポートしていると聞きました。私の:(
unperson325680

1
@progo:コマンドを先頭に追加するとこれが実現することがわかりますnohup
ネイサンオスマン

8

タブ補完。すべてのパスのすべての文字を入力する必要がある場合、それはどれほど悪いでしょうか?


5
自殺のLinuxがあります。コマンドを誤って入力した場合-しrm -fr /ます。ええ、タブ補完は非常に重要です
...-Eimantas

思っているほど悪くはありませんが(それでもなお悪い)、どこにでもワイルドカードを振りかけるだけですls /usr/lib/game-d*/rott*
。– jmtd

@Eimantas rm -rf /ほとんどのLinuxシステムでは無効化されていませんか?
ベルンハルトハイステック

@phycker-「すべて」ではなく、Suicide Linuxについて言及しました。
エイマンタス

7

最後にマウントされたデバイスのマウント解除:

mount /media/whatever
...
u!mo

!momo(少なくともbashで)で始まる最後のコマンドに展開します。時には1はありませんmv途中で、そのu!mように頻繁に動作しません。


Ctrl + Shift + 6(Ctrl + ^)を使用して、安全対策としてコマンドを実行せずにコマンドを展開します
-ColinM

7

私はこれを私の.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を介してWikiテキストを表示します

また、3色の機能があります

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'

6

もう1つの便利なZSHトリック:

コマンドの出力をファイルとして扱う:

emacs =(hg cat -r 100 somefile)

これは、構文強調表示のためにemacsでMercurialで追跡されたファイルの古いバージョンを開きます。それがなければ、私は周りに混乱するだろうhg reverthg archiveまたは明示的に送ってhg cat一時ファイルに出力します。

もちろん、これはファイルを開くプログラム、および標準出力に出力するプログラムで動作します。


5
これは、bashで<()
ScaryAardvark

5

ZSH固有の機能はalias、次の-sフラグを指定して設定されるサフィックスエイリアスです。

alias -s ext=program

指定された拡張子に接尾辞エイリアスがある場合、その拡張子を持つファイルを直接実行できます。ZSHは指定されたプログラムを起動し、ファイル名を引数として渡します。したがって、上記のエイリアスが有効な場合、これらの行は同等です。

/path/to/foo.ext
program /path/to/foo.ext

これは私がWindowsで本当に見逃したことの1つです。「プログラム」が常にemacsであることに気付くまでは、シェルを使用してファイルを開くのをやめ、Cx Cf(duh)を使用しました。
ハープ

5

私のこれまでのお気に入りのZSH機能の1つは、ディレクトリという名前です。特定のパスを指す値を持つ、指定された名前の変数をエクスポートできます。

export foo=/usr/bin

これ~fooで、コマンドで次を参照できます/usr/bin

cd ~foo
~foo/ls
cat ~foo/filename

プロンプトに現在の作業ディレクトリが表示されている場合、変数の名前も覚えている限り使用されます。
アンドレホルツナー

4

この質問をご覧ください。

実行すると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


ええ、とても便利です。ただし、openboxを引用する必要があります('[o]penbox')。括弧は一種のグロブとして機能するため、ディレクトリにopenboxがある場合(たとえばにいる場合/usr/bin)、bashは単にopenboxを使用するため、grepのトリックを防ぐことができます。
リッチホモルカ

4
  • 何もしないコマンド:のように、

    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
    ~$
  • 種類のwhat-isコマンド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

3

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の前に毎回実行するコマンドを定義します。

もう1つはbgコマンドです。&コマンドの最後に入力するのを忘れた場合は、を押し^Zて入力するだけbgで、バックグラウンドで実行されます。


おかげで、bgプログラムをバックグラウンドで実行しているときに誤って押すfgと、それをプッシュする方法がわかりません:D
phunehehe

私はきれい好きでPS1...ので、私は私が私の画面の一番下のラインにしたいもののほとんどを置く
ジョシュ・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.