変更ディレクトリのエイリアスを作成し、そのディレクトリを新しい端末タブで現在の作業ディレクトリにします。

変更ディレクトリのエイリアスを作成し、そのディレクトリを新しい端末タブで現在の作業ディレクトリにします。

ディレクトリを変更してから、そのディレクトリからノードサーバーを起動する便利なエイリアスを作成しようとしています。私はほとんどうまくいっていますが、解決できない小さな問題が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

別の道に行かなければなりません。.bashrcbashインスタンスの最後のディレクトリ(現在の作業ディレクトリ)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現在の作業ディレクトリに変更します。

おすすめ記事