it-swarm-ja.com

定義後にBashサブシェルに引数を渡す

私はこのようなことをしたいです:

(cd "$1" && pwd && many && other && commands) < echo "../path"

提供された引数を受け取り、それらをサブシェルに渡す必要があります。その後、サブシェルが実行されます。

重要なのは、渡された引数がコマンドラインの最後にあり、ユーザーが上矢印を押したときにカーソルがコマンドの最後にあるため、簡単に変更できることです。

1
meridius

Bashサブシェルは、親シェルの変数を継承します(ただし、それらは変更されません!)。
簡単な方法は、親シェルで定義および変更する変数を使用して一連のコマンドを定義することです。

MyTempVar="FirstPath"
(cd "$MyTempVar" && pwd && many && other && commands) && unset MyTempVar
MyTempVar="NewPath"
!-2      
  • !-2を使用すると、履歴オプションが有効になっている場合、履歴の最後から2番目のコマンドを実行します。これは、組み込み bashの履歴を拡張したものです。
  • より安全なのは、履歴からのコマンドが処理される前に、histverifyshopt -s histverifyが視覚的に確認できるようにすることです。
  • 再び安全です UpUpEnter
  • unset MyTempVarを使用すると、必要に応じて変数MyTempVarの設定を解除できます。

関数やスクリプトを作成して、それらに変数を渡すこともできます。例えば。

TTT(){ (A="$1"; cd "$A" && pwd ;)  }

その後、

TTT MyPath
2
Hastur