追加読書

追加読書

私たちは環境(1)実行したいコマンドの環境を変更します(例env MANPAGER=more man dtrace:)。同様のことがありますが、コマンドが実行されるディレクトリを変更することはありますか?

理想的には次のようになりたいです。

theMagicCommand /new/cwd myProgram

このようにして、他のenv(1)と同様のコマンドと「接続」することができます。

daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram

これまで、次の解決策を考えてみることができますが、残念ながらそれに対応する解決策はありません。相互作用環境(1):

cd /new/cwd && myProgram

または、次の簡単なシェルスクリプトを作成できます。

#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"

しかし、私は(少なくともmacOSとFreeBSDに)すでに存在しているものを探しています。

myProgram必ずしもデスクトップアプリケーションである必要はありません(この場合は次のものを使用できます)。.desktopファイルを入力してください。)。

ベストアンサー1

AFAIK、POSIX ツールボックスにはこれらの専用ユーティリティはありません。ただし、コマンドを実行する前に、通常はshスクリプトと同様に環境(cwd、制限、stdout / in / err、umask ...)を設定するために呼び出されますsh

ただし、スクリプトをファイルに書き込む必要はなく、インラインで書くだけです。

sh -c 'CDPATH= cd -P -- "$1" && shift && exec "$@"' sh /some/dir cmd args

(ディレクトリではないと仮定-)。CDPATH=(環境にいる場合)を追加し、-Pより直線のように機能するようにしますchdir()

perlまたは、デフォルトで誰がそのタスクを実行しているかを使用することもできます。chdir()chdir()

perl -e 'chdir(shift@ARGV) or die "chdir: $!"; exec @ARGV or die "exec: $!"
         ' /some/dir cmd args

おすすめ記事