在定义 Bash 子 shell 后向其传递参数

在定义 Bash 子 shell 后向其传递参数

我想做这样的事:

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

它应该接受提供的参数并将它们传递给子 shell。然后子 shell 应该执行。

重要的是传递的参数位于命令行的末尾,以便于轻松更改,因为当用户按下向上箭头时,光标位于命令的末尾。

答案1

bash 子 shell 将继承父 shell 的变量(但不会修改它们!)。
一种简单的方法是使用您在父 shell 中定义和修改的变量来定义一系列命令。

MyTempVar="FirstPath"
(cd "$MyTempVar" && pwd && many && other && commands) && unset MyTempVar
MyTempVar="NewPath"
!-2      
  • 使用!-2,如果启用了历史记录选项,您将执行历史记录中的倒数第二条命令。它是内置bash 的历史。
  • 更安全的方法是启用它histverifyshopt -s histverify处理历史记录中的命令之前进行视觉确认。
  • 再次安全,它是Up++ UpEnter
  • 如果需要,您unset MyTempVar可以选择取消设置该变量。MyTempVar

您甚至可以创建一个函数或脚本并将变量传递给它们。例如

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

然后调用

TTT MyPath

相关内容