起動時に実行可能ファイルに関連するファイルを開くアプリケーションがあります (このファイル パスはプログラム バイナリに静的にコンパイルされ、変更できません)。最初にフォルダーに「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>