どこからでも相対ファイルパスを開くアプリケーションの実行

どこからでも相対ファイルパスを開くアプリケーションの実行

起動時に実行可能ファイルに関連するファイルを開くアプリケーションがあります (このファイル パスはプログラム バイナリに静的にコンパイルされ、変更できません)。最初にフォルダーに「cd」してファイルが見つかるかどうか確認しなくても、システム内のどこからでも実行できるエイリアスを作成したいと考えています。

それは可能でしょうか?

答え1

プログラムがcdディレクトリへの移動を要求し、プログラムを変更できない場合は、cdそのディレクトリに移動せずにプログラムを実行することはできません。それだけ簡単です。

cdただし、ディレクトリに -s してプログラムを実行する2 番目のシェルを起動することはできます。プログラムが終了すると、2 番目のシェルは終了しますが、メイン シェルは終了しないためcd、同じ場所にとどまります。

簡単な例を挙げます。

$ alias ptmpdir="bash <<< 'cd /tmp ; pwd'"
$ ptmpdir
/tmp

これは、コメントで Kamil Maciorowski が指摘しているように、コマンドをシェルの STDIN に配置します。pwd例のようにプログラムが STDIN を使用せず、エラーをチェックしない場合は、これで問題なく動作します。

alias lstmpdir="bash -c 'cd /tmp && ls' ls"

エラーをチェックし、失敗した場合には正しい終了コードを提供しますcd

$ alias ptmpdir="bash -c 'cd /hop && ls' ls"
$ if ptmpdir ; then
> echo yes
> else
> echo no
> fi
ls: line 0: cd: /hop: No such file or directory
no

コマンドに引数も渡したい場合は、エイリアスが乱雑になり、さらに理解しにくくなります。その場合は、関数の方が適しています。

$ hop(){ bash   -c 'cd /tmp && exec ls "$@"' ls "$@" ; }
$ hop
7iCipjf8J7         eh._2700550        in.clean.1285563                          tmp-ntt.xpi
MozillaMailnews    <rest deleted>

$ hop -lrt
total 56496
drwxrwxr-x 3 ljm      ljm          4096 Nov  5 17:28 gimp
drwxrwxr-x 2 ljm      ljm          4096 Nov  5 18:14 jna-107183
-rw------- 1 ljm      ljm             0 Nov  6 00:17 config-err-Ol5gyl
drwx------ 2 ljm      ljm          4096 Nov  6 00:17 ssh-FqqWxHh4jhu8
<rest deleted>

関連情報