私のファイルに.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'
もちろん、ここには欠点もあります。たとえば、同様のエイリアスを使用してこの問題を解決できますが、pushd
orでは機能しません。popd
私が完全に考慮していない他の特別なケースがあるかもしれません。
また、cshrcファイルに保持しているエイリアスが実際にエイリアスであるかどうかを検討してください。必要エイリアスになります。何らかの方法で(変数を設定したり、ディレクトリを変更して)シェル環境を変更しない限り、スタンドアロンシェルスクリプトである可能性が高くなります。この場合、実際に機能をサポートするシェルを使用して作成できます。
答え3
最後に、私の解決策は、スクリプトを使用して$CLIENT
変数を私のエイリアスに渡すことでした。
例:
このスクリプトでクライアントディレクトリを見つけるには、find_client.sh
このメソッドを作成して使用します。echo $PWD | awk -F / '{ print $5; }' | xargs
フルパスを追加して出力をエコーします。
次のように、エイリアス(ファイル)にエイリアスを作成.cshrc
します。
alias wk 'cd `find_client.sh`'
これまでは期待通りに動作しているようです。