エイリアスのパスを動的に変更するには?

エイリアスのパスを動的に変更するには?

私のファイルに.cshrcパスを使用するエイリアスがたくさんあります。

/projects/project_name/my_name/$CLIENT

作業ディレクトリパスからフォルダ名を取得し、さまざまなエイリアスで使用するために環境変数に保存するように設計された短いスクリプトを作成しました。

set client_name = `echo $PWD | awk -F / '{ print $5; }' | xargs`

setenv CLIENT $client_name  

source ~/.cshrc   

現在の問題は、ランタイム環境変数が以前の値から更新されないことです。残念ながら、CシェルはBash(潜在的な代替)のような機能の使用をサポートしていません。

コマンドラインで変数を更新するにはどうすればよいですか?これを達成するより良い方法はありますか?

ありがとう

答え1

$5作業ディレクトリパス()に5つの変数がないため、スクリプトは空の文字列を入力できますが、pwd入力文字列を見ないとわかりにくいです。この問題についてさらに支援が必要な場合は、追加情報を使用して質問を更新し、awk送信する入力がどのようなものかを示す必要があります。

エイリアスを動的にする方法があるかどうかはわかりませんが、単に各エイリアスを bash 関数に変換できます。 Bash関数は、変数、、...などにfunct_name () {commands}格納されている引数も受け入れる形式を取ります。したがって、動的データをパラメータとして読み取るbash関数を生成できます。たとえば、$1$2$3

test () {
  echo $1
}

次のように動作します。

$ test abc
abc
$ test foobar
foobar

この方法をecho使用する$1$CLIENT持つ各エイリアスを bash 関数で再作成し、そのようにパラメータを使用します。

あなたが提供したコマンドの例を見ると、作業ディレクトリパスからフォルダ名を取得し、環境変数に保存してさまざまなエイリアスとして使用するようです。これを行うには、bash関数を作成するだけです。たとえば、作業ディレクトリのパスを取得する bash 関数は次のようになります。最初フォルダ名(4番目が必要なようです。変更してください)を$TEST環境変数に保存します。

test () {
  var=$(pwd | awk -F / '{ print $2; }')
  export TEST=$var
}

この機能を常に利用できるようにするには、上記の内容を.bashrcファイルに追加してください。新しい端末ウィンドウを起動するたびにtestこのコマンドを使用できます。現在動作している端末に追加するには(新しい端末を開く必要なしに)、次の手順を実行しますsource ~/.bashrc。その後、端末でコマンドのように関数を実行できます。を実行すると、test環境変数が更新され、aliasコマンドが機能します。実際の例は次のとおりです。

$ pwd
/home/user
$ echo $TEST

$ test
$ echo $TEST
home

実現する:コマンドは、作業しているディレクトリによって異なります。フォルダをルートに変更すると、$TEST最初のスラッシュの後に文字列がないため、私の例ではそこに空の文字列を入れます。これがおそらくawkあなたの場合、空の文字列が印刷される理由です。しかし、入力データを見ないと確かにわかりません。

答え2

ディレクトリが変更されるたびにcd変数を更新するエイリアスを追加することを検討してください。$CLIENT

alias cd 'cd \!*; set client_name = `echo $PWD | awk -F / '\''{ print $5; }'\'' | xargs`; setenv CLIENT $client_name'

もちろん、ここには欠点もあります。たとえば、同様のエイリアスを使用してこの問題を解決できますが、pushdorでは機能しません。popd私が完全に考慮していない他の特別なケースがあるかもしれません。

また、cshrcファイルに保持しているエイリアスが実際にエイリアスであるかどうかを検討してください。必要エイリアスになります。何らかの方法で(変数を設定したり、ディレクトリを変更して)シェル環境を変更しない限り、スタンドアロンシェルスクリプトである可能性が高くなります。この場合、実際に機能をサポートするシェルを使用して作成できます。

答え3

最後に、私の解決策は、スクリプトを使用して$CLIENT変数を私のエイリアスに渡すことでした。

例:

このスクリプトでクライアントディレクトリを見つけるには、find_client.shこのメソッドを作成して使用します。echo $PWD | awk -F / '{ print $5; }' | xargsフルパスを追加して出力をエコーし​​ます。

次のように、エイリアス(ファイル)にエイリアスを作成.cshrcします。

alias wk 'cd `find_client.sh`'

これまでは期待通りに動作しているようです。

関連情報