GNU/Linux >> Linux の 問題 >  >> Linux

シェルドットファイルでできること

シェルドットファイルに対して何ができるかではなく、シェルドットファイルに対して何ができるかを尋ねてください!

私はOSマップのいたるところにいますが、過去数年間、私の毎日のドライバーはMacでした。長い間、私はBashを使用していましたが、数人の友人がzshを改宗し始めたとき、私はそれにショットを与えました。私がそれを理解するのにそれほど時間はかかりませんでした、そして数年後、私はそれがする多くの小さなことのためにそれを強く好みます。

私はzsh(インストールされているシステムではなく、Homebrew経由で提供)とOhMyZsh拡張機能を使用しています。

この記事の例は、私の個人的な.zshrc用です。 。ほとんどはBashで直接動作し、Oh My Zshに依存しているものはないと思いますが、マイレージは異なる場合があります。 zshとBashの両方のシェルドットファイルを維持していた時期がありましたが、最終的には.bashrcをあきらめました。 。

私たちはみんなここで怒っています

OS間で同じドットファイルを使用できるようにしたい場合は、ドットファイルを少し賢くする必要があります。

### Mac Specifics
if [[ "$OSTYPE" == "darwin"* ]]; then
        # Mac-specific stuff here.
fi

たとえば、Alt +矢印キーを使用すると、カーソルが1つのスペースではなく単語だけ移動することを期待しています。これをiTerm2(私の好みのシェル)で実現するために、このスニペットを.zshrcのMac固有の部分に追加します:

### Mac Specifics
if [[ "$OSTYPE" == "darwin"* ]]; then
        ### Mac cursor commands for iTerm2; map ctrl+arrows or alt+arrows to fast-move
        bindkey -e
        bindkey '^[[1;9C' forward-word
        bindkey '^[[1;9D' backward-word
        bindkey '\e\e[D' backward-word
        bindkey '\e\e[C' forward-word
fi

ボブはどうですか?

シェルドットファイルが大好きになりましたが、自宅のマシンと仕事用のマシンで同じものを利用できるようにしたいとは限りませんでした。これを解決する1つの方法は、自宅では使用するが職場では使用しない補足のドットファイルを用意することです。これを達成した方法は次のとおりです。

if [[ `egrep 'dnssuffix1|dnssuffix2' /etc/resolv.conf` ]]; then
        if [ -e $HOME/.work ]
                source $HOME/.work
        else
                echo "This looks like a work machine, but I can't find the ~/.work file"
        fi
fi

この場合、仕事のDNSサフィックス(または状況に応じて複数のサフィックス)をキーオフし、仕事での生活を少し良くする別のファイルを入手します。

あなたがすること

チルダの使用をやめるのに今がおそらく良い時期です(~ )スクリプトを作成するときにホームディレクトリを表します。あなたはそれが認識されないいくつかの文脈があることに気付くでしょう。環境変数$HOMEを使用する習慣を身につける トラブルシューティングの時間と頭痛の種を後で大幅に節約できます。

論理的な拡張は、必要に応じて含めるOS固有のドットファイルを用意することです。

記憶、月明かりの下で一人で

Linuxターミナル

  • Linux用の上位7つのターミナルエミュレータ
  • Linuxでのデータ分析のための10個のコマンドラインツール
  • 今すぐダウンロード:SSHチートシート
  • 高度なLinuxコマンドのチートシート
  • Linuxコマンドラインチュートリアル

私は恥ずかしい量のシェルを書きました、そして私は本当にこれ以上書きたくないという結論に達しました。シェルがほとんどの場合必要なことを実行できないわけではありませんが、シェルを作成している場合は、問題を永続的に解決するのではなく、ダクトテープソリューションを一緒に叩いている可能性があります。

同様に、私は物事を暗記するのが嫌いであり、私のキャリアを通して、私は一日の間に根本的な文脈の変化をしなければなりませんでした。実際の結果は、私が何年にもわたって何度も多くのことを再学習しなければならなかったことです。 (「待ってください...この言語はどのforループ構造を使用しますか?」)

ですから、私は時々、何かをもう一度行う方法を探すのにうんざりしていると思います。人生を改善する1つの方法は、エイリアスを追加することです。

システムを扱う人にとって一般的なシナリオは、すべてのディスクを占有しているものを見つけることです。残念ながら、私はこの呪文を思い出すことができなかったので、bigdirsと呼ばれるシェルエイリアスを作成しました。 :

alias bigdirs='du --max-depth=1 2> /dev/null | sort -n -r | head -n20'

私は怠惰ではなく、実際にそれを覚えることができますが、まあ、それはUnixのやり方ではありません...

タイプミスとそれを愛する人々

シェルエイリアスを使用して私の生活を改善するもう1つの方法は、タイプミスから私を救うことです。理由はわかりませんが、wと入力するという厄介な習慣を身に付けました。 シーケンスeaの後 そのため、端末をクリアしたい場合は、cleawrと入力することがよくあります。 。残念ながら、それは私のシェルには何の意味もありません。この小さな金を追加するまで:

alias cleawr='clear'

同等の、しかしより良いコマンドを持つWindowsの1つのインスタンスでは、clsと入力していることに気付きます。 。あなたの殻が手を投げるのを見るのはイライラするので、私は付け加えます:

alias cls='clear'

はい、ctrl + lを知っています 、しかし私はそれを決して使用しません。

楽しんでください

仕事はストレスになることがあります。時々あなたはちょっとした楽しみを持っている必要があります。シェルがコマンドを認識していない場合は、明らかに実行する必要があります。 、たぶんあなたはそれに肩をすくめたいです!これは次の関数で実行できます:

shrug() { echo "¯\_(ツ)_/¯"; }

それでもうまくいかない場合は、テーブルをめくる必要があるかもしれません:

fliptable() { echo "(╯°□°)╯ ┻━┻"; } # Flip a table. Example usage: fsck -y /dev/sdb1 || fliptable

机をひっくり返す必要があり、何と呼んでいたのか思い出せなかったときの悔しさと欲求不満を想像してみてください。そこで、シェルエイリアスをさらに追加しました:

alias flipdesk='fliptable'
alias deskflip='fliptable'
alias tableflip='fliptable'

そして時々あなたは祝う必要があります:

disco() {
        echo "(•_•)"
        echo "<)   )╯"
        echo " /    \ "
        echo ""
        echo "\(•_•)"
        echo " (   (>"
        echo " /    \ "
        echo ""
        echo " (•_•)"
        echo "<)   )>"
        echo " /    \ "
}

通常、これらのコマンドの出力をpbcopy にパイプします 使用している関連するチャットツールに貼り付けます。

この楽しい関数は、私がフォローしている「コマンドラインマジック:」@climagicというTwitterアカウントから入手しました。私は今フロリダに住んでいるので、これが私の人生で唯一の雪であることをとてもうれしく思います:

snow() {
        clear;while :;do echo $LINES $COLUMNS $(($RANDOM%$COLUMNS));sleep 0.1;done|gawk '{a[$3]=0;for(x in a) {o=a[x];a[x]=a[x]+1;printf "\033[%s;%sH ",o,x;printf "\033[%s;%sH*\033[0;0H",a[x],x;}}'
}

機能を楽しむ

私が使用する関数の例をいくつか見てきました。これらの例のいくつかは引数を必要とするため、エイリアスとして実行できます。短いステートメントが1つ以上ある場合は、個人的な好みで関数を使用します。

私はキャリアのさまざまな時期に、オープンソースのスケーラブルな時系列メトリックソリューションであるGraphiteを実行してきました。メトリックパス(ピリオドで示されている)をファイルシステムパス(スラッシュで示されている)に、またはその逆に転置する必要がある場合が十分にあるため、これらのタスク専用の関数を使用すると便利になります。

# Useful for converting between Graphite metrics and file paths
function dottoslash() {
        echo $1 | sed 's/\./\//g'
}
function slashtodot() {
        echo $1 | sed 's/\//\./g'
}

キャリアの別の時期に、私はたくさんのKubernetesを実行していました。 Kubernetesの実行に慣れていない場合は、多くのYAMLを作成する必要があります。残念ながら、無効なYAMLを作成するのは難しくありません。さらに悪いことに、KubernetesはYAMLを適用しようとする前に検証しないため、適用するまで無効であることがわかりません。最初に検証しない限り:

function yamllint() {
        for i in $(find . -name '*.yml' -o -name '*.yaml'); do echo $i; ruby -e "require 'yaml';YAML.load_file(\"$i\")"; done
}

恥ずかしい思いをしたり、顧客の設定を壊したりすることにうんざりしていたので、この小さなスニペットを作成し、関連するすべてのリポジトリにコミット前のフックとして追加しました。特にチームの一員として作業している場合は、継続的インテグレーションプロセスの一部として同様のことが非常に役立ちます。

ああ、指、どこにいるの?

私はかつて優れたタッチタイピストでした。当時はもう昔のことです。信じられないほどタイプミスしました。

さまざまな時期に、かなりの量のChefまたはKubernetesを使用しました。幸いなことに、両方を同時に使用したことはありません。

Chefエコシステムの一部はTestKitchenです。これは、テストを容易にするツールのスイートであり、コマンドkitchen testで呼び出されます。 。 KubernetesはCLIツールkubectlで管理されます 。どちらのコマンドにもいくつかのサブコマンドが必要であり、どちらも指を特に滑らかに動かしません。

たくさんの「タイプミスエイリアス」を作成するのではなく、それらのコマンドをkにエイリアスしました。 :

alias k='kitchen test $@'

または

alias k='kubectl $@'

タイムスプリッター

私のキャリアの後半は、他の人とより多くのコードを書くことを含みました。私は、アカウントでリポジトリのコピーをフォークし、レビュープロセスの一部としてプルリクエストを使用する多くの環境で働いてきました。特定のリポジトリのフォークが親と最新であることを確認したい場合は、fetchupstreamを使用します :

alias fetchupstream='git fetch upstream && git checkout master && git merge upstream/master && git push'

私の目は色の到来の栄光を見てきました

私は色が好きです。差分などを使いやすくすることができます。

alias diff='colordiff'

色付きのマニュアルページは巧妙なトリックだと思ったので、この関数を組み込みました:

# Colorized man pages, from:
# http://boredzo.org/blog/archives/2016-08-15/colorized-man-pages-understood-and-customized
man() {
        env \
                LESS_TERMCAP_md=$(printf "\e[1;36m") \
                LESS_TERMCAP_me=$(printf "\e[0m") \
                LESS_TERMCAP_se=$(printf "\e[0m") \
                LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
                LESS_TERMCAP_ue=$(printf "\e[0m") \
                LESS_TERMCAP_us=$(printf "\e[1;32m") \
                man "$@"
}

whichコマンドが大好きです 。シェル関数でない限り、実行しているコマンドがファイルシステムのどこから来ているかを示すだけです。複数のカスケードドットファイルの後で、関数がどこで定義されているか、またはそれが何をするのかが明確でない場合があります。 whence およびtype コマンドはそれを助けることができます。

# Where is a function defined?
whichfunc() {
        whence -v $1
        type -a $1
}

結論

この記事が、毎日のシェル使用体験を改善する方法を見つけるのに役立ち、刺激を与えることを願っています。それらは、巨大で、斬新で、複雑である必要はありません。彼らは、マイナーではあるが頻繁な摩擦を解決したり、ショートカットを作成したり、一般的なタイプミスを減らすための解決策を提供したりするかもしれません。

私のドットファイルリポジトリを確認することは大歓迎ですが、多くのクリーンアップが必要になる可能性があることを警告します。役立つと思われるものは何でも自由に使用してください。お互いに優れているようにしてください。


Linux
  1. ポータブルシェルプログラミングのリソース?

  2. Scp用のシェルが必要ですか?

  3. 256 MBのクラウドVPSで0.99ドルで何ができるでしょうか?

  1. VPSとクラウドサーバーで何ができますか?

  2. Linux シェルの音訳スクリプト

  3. PS1 シェル変数の正しい場所は?

  1. システム管理者の仕事でお気に入りのシェルは何ですか?

  2. 「cd -」は何の略ですか?

  3. シェルスクリプトでの使用法()とは何ですか?