it-swarm-ja.com

「script」コマンドでセッションを記録するときに元の場所にcd

私が持っています script log.txt私のbashプロファイル;これにより、新しいサブプロセスが作成され、セッション全体がlog.txtに記録されます。押すと cmd+t 新しいターミナルを開くには、通常、コマンドが呼び出されたのと同じディレクトリにあるターミナルを開きます。ただし、新しいスクリプトサブプロセスは常にホームディレクトリに戻ります。

どういうわけか、現在のディレクトリをこのスクリプトコマンドに「渡す」方法はありますか?

1
Luiz

MacOSのターミナルには、1つのタブで実行されているプロセスから現在の作業ディレクトリを抽出し(/procなどを使用)、それを新しいタブの最初の現在の作業ディレクトリとして使用する機能があるようです。

この場合、最初のタブで実行されているプロセスはscriptです。これは、現在の作業ディレクトリを変更する必要がないため、新しいタブが常にそのディレクトリを作成します。 scriptの(一部の)子プロセスの現在の作業ディレクトリのみが実際に変更されていますが、ターミナルアプリケーションはそれに注意を払っていません。

これが正しければ、ターミナルアプリケーションの動作方法を変更するか、scriptの動作方法を変更する以外に回避策はありません。

1
Celada

現在のディレクトリは単純です:

CWD="$(pwd)" ; 
echo "PWD === ${CWD}" ;

または、これをインラインで渡すこともできます。例:

CWD="something" ./script log.txt

以下を含むスクリプトの内容:

cat script
#!/bin/bash
if [ $CWD ] ; then echo "CWD Preset & == ${CWD}" ; else echo "CWD NOT SET... SETTING to: $(pwd)" ; CWD=$(pwd) ; fi ;

明らかに、上記のexport変数もCWDできます。その場合、他のサブシェル/プロセスからアクセスできる必要があります。

export CWD="$(pwd)" ;  # or the path of interest
# ... then post New Terminal / Session:
echo "CWD == ${CWD}" ; 
0
aphorise