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

Bashでは、いつエイリアスを作成し、いつスクリプトを作成し、いつ関数を作成するのですか?

この質問をするのに、Linuxを10年近く使用しました。それはすべて試行錯誤であり、深夜のインターネットサーフィンはランダムでした。

しかし、人々はこれに10年を必要とすべきではありません。 Linuxを使い始めたばかりの場合は、次のことを知りたいと思います。エイリアスを作成するタイミング、スクリプトを作成するタイミング、関数を作成するタイミング

エイリアスに関しては、引数を取らない非常に単純な操作にエイリアスを使用します。

alias houston='cd /home/username/.scripts/'

それは明らかなようです。しかし、これを行う人もいます:

alias command="bash bashscriptname"

(そしてそれを.bashrcに追加します ファイル)

それをする正当な理由はありますか?本当に一生懸命頑張っていますが、本当にやりたい状況は思い浮かびません。したがって、それが違いを生むエッジケースがある場合は、以下に回答してください。

それは、PATHとchmod +xに何かを入れる場所だからです。 これは、何年にもわたるLinuxの試行錯誤の末に生まれたもう1つのことです。

次のトピックに進みます。たとえば、隠しフォルダ(.scripts/)を追加しました )ホームディレクトリで、.bashrcに行を追加するだけでPATHに移動できます (PATH=$PATH:/home/username/.scripts/ )、そのため、そこにある実行可能ファイルはすべて自動的にオートコンプリートされます。

必要に応じて。

でも、それは本当に必要ないのですか? Pythonのようにシェルではない言語にのみ使用します。

シェルの場合は、まったく同じ.bashrc内に関数を記述できます。 :

funcname () {
  somecommand -someARGS "[email protected]"
}

私が言ったように、私は試行錯誤を通してこれの多くを見つけました。そして、私は自分のコンピューターが死んだときだけ機能の美しさを本当に見ました。そして、彼らがそれらを使用していないとき、私は私の周りの人々のコンピューターを使用することを余儀なくされました。

スクリプトのディレクトリ全体をコンピュータからコンピュータに移動する代わりに、他のすべての.bashrcを自分のものに置き換えるだけでした。なぜなら、彼らは1回も変更を加えたことがなかったからです。

しかし、私は何かを逃しましたか?

では、Linuxの初心者ユーザーに、いつエイリアスを作成するか、いつスクリプトを作成するか、いつ関数を作成するかについて、何を伝えますか?

はっきりしない場合は、これに答える人が3つのオプションすべてを利用すると思います。エイリアスのみを使用する場合、スクリプトのみを使用する場合、または関数のみを使用する場合-またはエイリアスとスクリプトまたはエイリアスと関数またはスクリプトと関数のみを使用する場合 —この質問は実際にはあなたを対象としていません。

承認された回答:

エイリアスは、事実上(一般的に)コマンドのデフォルトオプションを変更する以上のことを行うべきではありません。これは、コマンド名の単純なテキスト置換にすぎません。引数では何もできませんが、実際に実行するコマンドに引数を渡します。したがって、単一のコマンドの前に引数を追加するだけでよい場合は、エイリアスが機能します。一般的な例は

です
# Make ls output in color by default.
alias ls="ls --color=auto"
# make mv ask before overwriting a file by default
alias mv="mv -i"

関数は、エイリアスよりも複雑なことを行う必要があるが、それだけでは役に立たない場合に使用する必要があります。たとえば、grepの変更について私が尋ねた質問に対するこの回答を見てください。 パイプラインにあるかどうかに応じたのデフォルトの動作:

grep() { 
    if [[ -t 1 ]]; then 
        command grep -n "[email protected]"
    else 
        command grep "[email protected]"
    fi
}

エイリアスには複雑すぎるため(条件に基づいて異なるデフォルトが必要)、関数の完璧な例ですが、非対話型スクリプトでは必要ありません。

関連:スクリプトをrootとして遡及的に実行するにはどうすればよいですか?

関数が多すぎたり、関数が大きすぎたりする場合は、それらを隠しディレクトリの別々のファイルに入れ、~/.bashrcでソースします。 :

if [ -d ~/.bash_functions ]; then
    for file in ~/.bash_functions/*; do
        . "$file"
    done
fi

スクリプトはそれ自体で立つ必要があります。再利用できるもの、または複数の目的に使用できるものとしての価値が必要です。


Linux
  1. Bashスクリプトに引数とオプションを追加する

  2. Env X =(){:;}; Command’Bashは、なぜそれが安全でないのですか?

  3. BashスクリプトをBashにパイプするときにパラメータを設定する方法は?

  1. エイリアス コマンドを bash スクリプトまたは .bashrc ファイルで機能させる方法

  2. アルファベット順に並べ替えたときに N 個のファイルを除くすべてを削除する Bash スクリプト

  3. bash スクリプトのコマンドとターミナルのコマンドの違い

  1. コマンドエイリアスのBash補完を取得する方法は?

  2. Bashスクリプトの変数に改行を追加する方法は?

  3. 関数とパラメータを変数として持つシェルスクリプト?