ディレクトリを変更して、そのディレクトリでノードサーバーを起動する便利なエイリアスを作成しようとしています。ほとんどの部分で機能していますが、理解できない小さな問題が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
。
これをエイリアスで実現する方法についてのアイデアはありますか?
あなたは別の道を行かなければなりません。 _.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
であり、bash
がフォアグラウンドプロセスグループにある場合(stat
フィールドの_+
_で示される)、次にpidを出力するsort | head -1
_最も低いpidのみが必要編集:
あなたの場合、これはより良い解決策かもしれません:
_cd $(readlink /proc/$(pgrep -n meteor)/cwd)
_
meteor
の最新のインスタンスのpidを特定し、この現在の作業ディレクトリに変更します。
これらのエイリアスを作成しました(私はbashを使用しています)
christian@fujiu1404:~$ alias ta='cd tmp ; date'
christian@fujiu1404:~$ ta
Wed Sep 17 14:47:16 BST 2014
christian@fujiu1404:~/tmp$ alias ta='cd tmp && date'
christian@fujiu1404:~/tmp$ cd ..
christian@fujiu1404:~$ ta
Wed Sep 17 14:48:28 BST 2014
christian@fujiu1404:~/tmp$
そして彼らは働きます!