web-dev-qa-db-ja.com

Bashはインタラクティブにバックティックを拡張できません

RHEL5.2(bash 2.3.25)では、 `pwd`/[TAB]をcdすると、pwd(1)の出力を使用して、pwdが現在の作業ディレクトリに置き換えられます。

Ubuntu 9.10(bash 4.0.33)で同じ機能を実現するにはどうすればよいですか。

私は以前の質問で、バックティックが古くて欠けていると言及しました。私はこれを知りませんでした。入れ子にするのは難しいことを理解でき、$ {}はスクリプトを使用しますが、シェルでインタラクティブにコマンドを評価できるようにしたいと思います。

5
The_Viper

これはバグではない機能です。

このようにシナリオについて考えてください。その完了を行うために、シェルはコマンドをバックティックで実行する必要があります。これは、2回以上実行することを意図していないもの、実行に長い時間がかかるものなどである場合、非常に深刻な悪影響を引き起こす可能性があります。

拡張を行うために、bashはパスである文字列のみを必要とします。文字列を完成させるために実行する必要があるプログラムは必要ありません。現在の作業ディレクトリのパスとして_./_を使用する場合は 提案 を検討してください。

最近の$()構文の方が一般的に好まれていますが、バックティックは古くも非推奨でもありません。ただし、あなたの例では、コマンドの使用はまったくお勧めできません。バックティックとコマンドは控えめに使用し、別の構文を使用できない場合にのみ使用してください。

4
Caleb

試す

cd ./TAB

代わりに。

cd $VAR/...
cd $(cmd)/...

私のためにも働かない。/etc/bash_completionファイルを比較できるかもしれません。

3
user unknown

「./」の代わりに「$ PWD /」が必要な状況があるため、常に「$ PWD /」の代わりに「./」を使用することをお勧めしません。 1つの例は、シンボリックリンクを実行する場合です。

/ somefolderにいるとします。次のコマンドを実行します。

ln -s ./file /target/file

これは壊れたリンクになります。あなたが本当にする必要があるのは:

ln -s $PWD/file /target/file

パス全体を入力するのは非常に非効率的です。 symlinkがこのように機能しないため、この問題は「非推奨」の問題とは無関係です。したがって、この問題を修正するためにバグを報告することをお勧めします。

1
Leeq