tcl環境で作業するとき、ディレクトリにCDを入れたら、私が指定したパスがそのパスへのシンボリックリンクであっても、実行するかどうかに関係なくパスワード-Lまたはパスワード-P、すべて絶対パスを返します。他のユーザーがスクリプトを実行したときに自分のワークスペースに切り替えるように、ユーザー固有のワークスペースパスを変数名に変更しようとしているので、これは私にとって面倒な作業です。ただし、$ :: env(WORK)システムはパスへのシンボリックリンクを返しますが、pwdコマンドは絶対パスを返すため、sedコマンドを実行できません。
例えば、
stcl> cd $::env(WORK)
stcl> puts [format "cd %s" [exec echo [pwd] | sed "s,$::env(WORK),\$WORK,g"]]
コードで必要なのは "cd $ WORK"を印刷することですが、pwdは絶対パスを返すので、pwd -Lを使用してもsedコマンドと一致できないため、文字列を置き換えることはできません。
答え1
Tcl は cd と pwd の制御を提供していないようです。
別のアプローチ:WORK環境変数でシンボリックリンクを確認して比較します。それパスワードを入力するには:
format {cd "%s"} [expr {[pwd] eq [file normalize $::env(WORK)] ? {$WORK} : [pwd]}]