Tengo un script launch.sh
que se ejecuta como otro usuario para crear archivos con el propietario correcto. Quiero pasar -x a esta invocación si se pasó originalmente al script
if [ `whoami` == "deployuser" ]; then
... bunch of commands that need files to be created as deployuser
else
echo "Respawning myself as the deployment user... #Inception"
echo "Called with: <$BASH_ARGV>, <$BASH_EXECUTION_STRING>, <$->"
sudo -u deployuser -H bash $0 "$@" # How to pass -x here if it was passed to the script initially?
fi
He leído la página de depuración de bash, pero parece que no hay una opción clara que indique si se inició el script original -x
.
[[ $- == *x* ]]
para la coincidencia de patrones.case $- in *x*) ... ;; *) ... ;; esac
. Es útil conocer este uso decase
scripts que están destinados a ser portátiles, y ahora que lo sé, me resulta más fácil recordar eso, que recordar "si es específico de bash, entonces[[
, de lo contrariocase
".$-
salidashB
. ¿Qué hacen los-h
y-B
las banderas / argumentos hacen? No veo entonces en la página de manual de bash .set -o
saldráxtrace on
si-x
se usa, de lo contrarioxtrace off
.fuente
Aunque la respuesta de @Patrick es la "correcta", también puede pasar un parámetro o una variable exportada a su script secundario que le diga qué hacer, como activar el rastreo.
Esto tiene la desventaja de que (creo) que tiene que volver a exportarlo a cada nivel de script que está a punto de ingresar.
Tiene la ventaja de poder rastrear selectivamente (o afectar de otra manera) solo los scripts de los que necesita el comportamiento de salida / modificado, para reducir la salida extraña, etc. Por ejemplo, el rastreo puede estar desactivado para el script de llamada y todavía se activa en el script llamado. No es una propuesta de todo o nada.
No es parte de su pregunta, pero está relacionado:
A veces defino una variable como
o
y usarlo (en múltiples declaraciones) como
o, solo para la segunda variación,
Luego, solo comento la segunda definición cuando quiero que se ejecuten los comandos. También puede utilizar esta técnica con un parámetro o variable exportada en su lugar.
Con cualquiera de estos, debe tener cuidado con las declaraciones compuestas porque el método solo está garantizado para funcionar en la primera declaración de la lista compuesta.
fuente
Puede tomar el PID del proceso y luego examinar la tabla de procesos con ps para ver cuáles fueron sus argumentos.
fuente
-x
se configuró dentro del script, no se mostrará en laps
salida. Y esta solución es ineficiente de todos modos.set -o
solución que he propuesto. También debería funcionar para opciones que no tienen un indicador asociado como-x
.