web-dev-qa-db-ja.com

シェルで.bash_profile / .profile / bashrcに関数を追加する方法は?

エポック時刻を日付に変換する機能があります。ここに定義があります

date1(){
  date -d @$1
}

書きたいのですが。

$ date1 xxxyyy

ここで、xxxyyyは関数に渡すパラメーターであり、対応する日付を取得できます。どちらかに追加する必要があることを理解しています.bash_profile.profile、または.bashrcそしてそれを調達する:

$ source file

しかし、どのファイルに入れるかわかりません。現在、.profile。しかし、それを実行するには、source .profile 毎回。

理想的には、コンピューターが環境変数のように起動したときに、それを使用可能にする必要があります。

24
Dude

man bashから:

Bashが対話型ログインシェルとして、または--loginオプションを使用して非対話型シェルとして呼び出されると、ファイル/ etc/profileが存在する場合、そのファイルからコマンドを読み取り、実行します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをこの順序で検索し、存在し、読み取り可能な最初のコマンドからコマンドを読み取って実行します。

つまり、~/.bash_profile~/.bash_login~/.profileのいずれか、または任意のファイルsourcedのいずれかに置くことができます。それらの。通常、~/.profileは、~/.bashrcをソースにします。これは、「ログインシェルに対して実行される個人用初期化ファイル」です。

これを有効にするには、新しいシェルを起動してexec $Shellを実行するか、source ~/.bashrcを実行します。

25
l0b0

.profileで関数を定義したら、export -f date1を追加します。これにより、ログインシェルで使用する関数がエクスポートされます。

13
DopeGhoti

対話型シェルのカスタマイズは~/.bashrcに組み込まれます。ログイン時に実行したいものは~/.profile(または~/.bash_profileに移動しますが、グラフィカルにログインするとロードされないことがよくあります)。

この関数定義を~/.bashrcに入れます。

ログインシェルの場合、bashは.bashrcをロードしないので、強制的にロードします:~/.bash_profileを含む

. ~/.profile
case $- in *i*) . ~/.bashrc;; esac

つまり、~/.profileをロードし、シェルがインタラクティブな場合は~/.bashrcもロードします。

。bashrcの代替 とそこにリンクされている投稿を参照してください。

cshとtcshはbashのような機能をサポートしていませんが、実行できます。

たとえば、これはテキストを印刷する簡単な関数です

alias print_hello_world 'eval echo "hello world"'

スクリプトに引数を渡す

repeate_after_me 'eval echo "$1"'

ifステートメントのように複数行のコードを実行するのは少し複雑ですが、ここに進みます。

alias X 'eval "if (\!:1 =~ 'yes') then \\
          echo yes \\
          else \\
          echo no \\
          endif"'

評価はまだ必要ですが、最も複雑な部分は\!:[x]構文を使用して、コマンドラインから入力を取得します。

それはあなたを整理するのに十分なはずです。

1
user1610950

typesetを使用すると、現在のすべての関数をbashrcにリダイレクトできます。

たとえば、オプションのパラメーターを指定したopenstackコマンドの関数をbashrcに追加する方法を次に示します。

urc() { . stackrc; set -x; openstack server list --all $1; set +x; }
typeset -f >> ~/.bashrc

今後のセッションのために保存され、次のように使用できます。

$ urc 

または

$ urc --debug
0
Noam Manos