Pasar un parámetro a través de la tubería en bash

Estoy tratando de pasar un parámetro a través de una tubería en la terminal para un command git, y, como de costumbre, no sé lo que estoy haciendo.

Actualmente: git rm --cached folder/path | rm -rf folder/path | git commit -m '...' git rm --cached folder/path | rm -rf folder/path | git commit -m '...'

Me gustaría no tener que repetirme con la ruta de la carpeta en el segundo command si es posible, pero no estoy seguro de cómo get la folder/path desde el primer command.

¿Es posible, o estoy ladrando el tree equivocado?

No deberías necesitar hacer tubería.

 rm folder/file git rm !$ git commit -m "your message" 

Aprender el operador bang (!) En bash es muy útil. Especificar una ruta larga de nuevo no es la mejor.

Para la mayor parte de mi flujo de trabajo, puedo salirse con la suya con esto:

 rm path/to/unwanted/file git add -A # stages ALL changes in the work tree git commit -m "my message" 

Si estoy corrigiendo una confirmación anterior que erróneamente agregó el file que no deseaba, puede modificar esa confirmación cambiando la última confirmación en el fragment de código anterior a

 git commit --amend -C HEAD 

Esto reutilizará el post de la confirmación actual.

Es posible que desee include el resultado de su estado de git y lo que está tratando de hacer.

 x=/folder/path && git rm --cached $x | rm -rf $x | git commit -m '...' && unset x 

Creo que esto debería funcionar:

 param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...' 

Editar: la solución @pholser hace las cosas más limpias eliminando la variable del entorno con unset . Esto también se puede hacer ejecutando los commands en una subcapa :

 (param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...') 

No necesita eliminar del índice y eliminarlo del sistema de files por separado, git rm está diseñado para hacer ambas cosas:

 git rm -r folder/path 

No tiene sentido cambiar de rm a rm o git commit porque ninguno de los dos lee de la input estándar en los formularios que está intentando. Puedes simplemente usar ; para separar los commands.