ディレクトリを変更してから、そのディレクトリからノードサーバーを起動する便利なエイリアスを作成しようとしています。私はほとんどうまくいっていますが、解決できない小さな問題が1つあります。
ファイル内のディレクトリのみを変更するようにエイリアスを設定すると、予想される~/.bashrc
動作が表示されます。
alias ta='cd /Users/scotty/Develop/Meteor/task-assist'
期待される動作は、$ ta
端末でこれを実行すると、ディレクトリが変更されるだけでなく、端末で新しいタブを開くこともでき、ディレクトリが新しいタブに継承されることです。
ただし、何らかの理由でノードサーバーを起動するためにそのエイリアスに追加のコマンドを追加すると、再実行$ ta
後に現在のディレクトリが新しいターミナルタブに送信されません(新しいタブはルートディレクトリでのみ開きます)。ディレクトリが変更され、サーバーの起動時に変更されたディレクトリが実際に端末に設定されていないのと同じです。ディレクトリは、サーバーをシャットダウンしたときにのみctrl +c
端末で更新されます。私は成功せずに動作するようにエイリアスと関数を試しました。
### meteor is the command that starts the server
alias ta='cd /Users/scotty/Develop/Meteor/task-assist && meteor'
### Also tried a function
ta(){
cd /Users/scotty/Develop/Meteor/task-assist
meteor
}
現在の作業ディレクトリで新しいターミナルタブを開くには、ディレクトリを変更し、メトロを実行する2つの別々のコマンドが必要なのとほぼ同じです。もう一度明確に説明するには、端末で実行してからキーを押して$ta
新しいcmd + t
タブを開くと、新しいタブの現在のディレクトリは次のようになります/Users/scotty/Develop/Meteor/task-assist
。
エイリアスを使用してこれを達成する方法についてのアイデアはありますか?
ベストアンサー1
別の道に行かなければなりません。.bashrc
bashインスタンスの最後のディレクトリ(現在の作業ディレクトリ)CWD
で、変更されたディレクトリの末尾に行を追加します。
次の行が私にとって効果的です。
cd $(readlink "/proc/$(echo -n $(ps -u $(whoami) -eo stat,pid,cmd | awk '$3 == "'$(which bash)'" && $1 ~ /\+/{print $2}' | sort | head -1))/cwd")
説明する:
cd $(...)
:ディレクトリを識別されたディレクトリに変更します。readlink /proc/$(...)/cwd
/proc/pid/cwd
:(現在の作業ディレクトリ)を指すリンクを読みます。echo -n $(...)
: 末尾の改行を削除ps -u $(whoami) -eo stat,pid,cmd
:私のプロセスを簡単な形式で提示awk '$3 == "'$(which bash)'" && $1 ~ /\+/{print $2}'
それが前景プロセスグループ(フィールドとして表示)にbash
ある場合はpidを印刷します。bash
+
stat
sort | head -1
最低PIDが欲しい
編集する:
あなたの場合、これはより良い解決策になるかもしれません。
cd $(readlink /proc/$(pgrep -n meteor)/cwd)
最新のインスタンスのpidを決定し、meteor
現在の作業ディレクトリに変更します。