ディレクトリを引数としてコマンドを実行し、同じディレクトリにcdするにはどうすればよいですか? 「該当するファイルやディレクトリがありません」というメッセージが表示されます。

ディレクトリを引数としてコマンドを実行し、同じディレクトリにcdするにはどうすればよいですか? 「該当するファイルやディレクトリがありません」というメッセージが表示されます。

次のように短い関数を作成したいと思います。 「file.tex」ファイルを私のドキュメントディレクトリに移動するとしましょう。

mv file.tex ~/Documents

cdその後、そのディレクトリに移動したいと思います。

cd ~/Documents

私はこれを行うために、これをすべてのディレクトリに一般化したいと思います。

mv file.tex ~/Documents
follow

そして、followコマンドが前のコマンドからターゲットを読み取り、それに応じて実行されるようにします。単純なディレクトリでは時間がかかりませんが、ネストされたディレクトリを使用するときに次のものを使用できる場合

mv file.tex ~/Documents/folder1/subfolder1
follow

私はそれが比較的簡単だと思い、次のようにすることができました:

follow()
{
    place=`history 2 | sed -n '1p;1q' | rev | cut -d ' ' -f1 | rev`
    cd $place
}

しかし、これはうまくいかないようです。 echoを実行すると、$place目的の文字列が得られますが(を使用してテスト中です~/Documents)、最後のコマンドは返します。

No such file or directory

ディレクトリが存在します。私は迷っています。助けてください?

ベストアンサー1

関数を定義する代わりに、$_前のコマンドの最後の引数に拡張された変数を使用できますbash。したがって、以下を使用してください。

cd "$_"

mv注文後。

履歴拡張を使用することもできます。

cd !:$

機能を使用する必要がある場合:

follow () { cd "$_" ;}

$ follow () { cd "$_" ;}
$ mv foo.sh 'foo bar'
$ follow 
foo bar$ 

気づく:この答えは、位置引数の処理に使用する正確なコマンドライン引数の形式についてです。たとえば、事前に特定の検査を組み込む必要がある他の形式では、mv -t foo bar.txtラッパーが適しています。

おすすめ記事