1

Я хотел бы сделать что-то вроде этого:

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

Который должен взять предоставленные аргументы и передать их в подоболочку. Subshell должен затем выполнить.

Важной частью является то, что переданные аргументы находятся в конце командной строки, что позволяет легко изменять, потому что курсор находится в конце команды, когда пользователь нажимает стрелку вверх.

1 ответ1

2

Подоболочка bash унаследует переменные родительской оболочки (но не изменит их!).
Простой способ - определить последовательность команд с переменными, которые вы определяете, и изменить их в родительской оболочке.

MyTempVar="FirstPath"
(cd "$MyTempVar" && pwd && many && other && commands) && unset MyTempVar
MyTempVar="NewPath"
!-2      
  • С !-2 , если опции истории включены, вы будете выполнять вторую последнюю команду вашей истории. Это расширение встроенной истории bash.
  • Более безопасным является включение в histverify с помощью shopt -s histverify визуального подтверждения до обработки команды из истории.
  • Опять безопасно, это Up + Up + Enter.
  • С помощью unset MyTempVar вы можете при желании сбросить переменную MyTempVar .

Вы даже можете создать функцию или скрипт и передать им переменные. Например

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

затем позвоните

TTT MyPath

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .