
一部のプログラムでは、ファイル名のチルダ ショートカットが認識されず、/home/dave/myfile.txt
の代わりになどの完全な正規パスが想定されます~/myfile.txt
。
チルダが使用されるたびに~
、bash で完全な正規パスに置き換える方法はありますか?~user
答え1
まあ、perl についてはよくわかりませんが、bash スクリプトでは eval を使用してその変換を行うことができます。
eval dir='~user/somedir'
$dir には完全なパス (つまり、この時点では /home/user/somedir) が含まれます。
答え2
Bash シェルで次のようにコマンドを実行すると、
command ~/myfile.txt
シェルは最初に~
(引用符で囲まれていない限り)を展開し、その結果を使用してコマンドを実行します。
しかし、一部のプログラムは を解釈しないのは事実です~
。たとえば、次のようになります。
$ cat "~/myfile.txt"
~/myfile.txt: No such file or directory
しかし、代わりにこれが機能します:
nano "~/myfile.txt"
しかし、この動作はBashの拡張によって隠されているため、それ以上の解釈は必要ありません。
明らかなことかもしれませんが、プログラムが設定ファイルを使用し、その中にいくつかのパスを期待している場合、それらを展開するのは Bash の役割ではないことに注意してください。