Linux / bashで少し複雑なスクリプトのエイリアスを追加する

Linux / bashで少し複雑なスクリプトのエイリアスを追加する

Stormviruxは他のスレッドでこの素晴らしいスクリプトを提供しました。リスト出力に列ヘッダーを挿入しますls -l

#!/bin/bash
{ echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename; ls -l ; } | column -t | awk 'NR!~/^(2)$/'
ls -l | head -1

コマンドラインから実行できます。私はそれを愛し、lslbashを実行しているLinuxシステムでエイリアスとして使用したいと思います。

しかし、私は区切り文字が正しく解釈されるように動作させる方法を生涯把握することはできません。コマンドラインでaliasコマンドを使用しようとすると(設定ファイルに送信する前にこれを実行するなど.bashrc)、機能しません。正しく解釈できるようにさまざまな方法でパッケージ化しようとすると、さまざまなエラーが発生します。

誰かがこれをエイリアスとして機能させる方法を教えたり、そのようなものをエイリアスとして機能させるには、何をすべきかを明確に伝える良い参照を教えてください。

答え1

別の方法は関数として定義できます.bashrc

lsl() {
  { echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename;
  ls -l; } | 
  column -t | 
  awk 'NR!~/^(2)$/'
  ls -l | head -1
}

答え2

エイリアスとして使用する必要がある場合:

alias lsl='{ echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename; ls -l ; } | column -t | awk '\''NR!~/^(2)$/'\'';ls -l | head -1'

停止文字列として解釈されないように、内部単一引用符をバックスラッシュにエスケープする必要があります。

二重引用符を使用すると、次のように解釈され!ます。歴史的拡張より多くのエスケープが必要なので、おそらく最も混乱した問題かもしれません(bash: !~/^: event not found理解できない横説説である""のような)。


上記の方法も有効ですが、より良い方法は、ファイルをパスのどこかに置いて実行可能にすることです。たとえば、投稿の内容を含む~/.local/binスクリプトを作成し、それを次に送信します。lslchmod +x ~/.local/bin/lsl.bashrc

export PATH="$HOME/.local/bin:$PATH"

そのディレクトリに実行可能ファイルがあることを確認してください。その後、lslどこでもコードを実行するように書くことができます。このアプローチは、メンテナンスがより簡単で理解しやすくなります。

関連情報