quello che stai cercando di fare è impossibile. o meglio: come stai cercando di farlo è impossibile.
vostro comando bash è sbagliato. bash -s command
non esegue command
. memorizza semplicemente la stringa "comando" nella variabile $1
e quindi ti porta al prompt. questo è il motivo per cui lo script python sembra bloccarsi. cosa intendevi fare è bash -c command
.
perché fonte .bashrc
? non sarebbe sufficiente solo la fonte .bash_aliases
?
anche se hai ottenuto correttamente il comando bash, le modifiche avranno effetto solo nella sessione di bash avviata da python. una volta che la sessione di bash è stata chiusa e il tuo script python è terminato, sei tornato alla tua sessione bash originale. tutte le modifiche nella sessione di bash avviate da Python vengono perse.
Ogni volta che si desidera modificare qualcosa nella sessione di bash corrente, è necessario farlo dall'interno della sessione di bash corrente. la maggior parte dei comandi eseguiti da bash (comandi di sistema, script python, persino script di bash) genererà un altro processo e tutto ciò che fai in quell'altro processo non influirà sulla tua prima sessione di bash.
source
è un built-in bash che consente di eseguire comandi all'interno della sessione bash in esecuzione, invece di generare un altro processo e di eseguire i comandi lì. la definizione di una funzione bash è un altro modo per eseguire comandi all'interno della sessione bash in esecuzione.
vedere this answer per ulteriori informazioni sull'approvvigionamento e l'esecuzione.
che cosa si può fare per ottenere quello che vuoi
modificare lo script python per fare solo le modifiche necessarie per .bash_aliases
.
preparare uno script di bash per eseguire lo script python e quindi l'origine .bash_aliases
.
#i am a bash script, but you have to source me, do not execute me.
modify_bash_aliases.py "[email protected]"
source ~/.bash_aliases
aggiungere un alias al vostro .bashrc
alla fonte che lo script
alias add_alias='source modify_bash_aliases.sh'
ora quando si digita add_alias some_alias
in bash richiede che sarà sostituito con source modify_bash_aliases.sh
e poi giustiziato. poiché source
è un built-in bash, i comandi all'interno dello script verranno eseguiti all'interno della sessione bash in esecuzione. lo script python verrà comunque eseguito in un altro processo, ma il successivo comando source
verrà eseguito all'interno della sessione bash in esecuzione.
un altro modo
modificare lo script python fare solo le modifiche necessarie per .bash_aliases
.
preparare una funzione di bash per eseguire lo script python e quindi l'origine .bash_aliases
.
add_alias() {
modify_bash_aliases.py "[email protected]"
source ~/.bash_aliases
}
ora è possibile chiamare la funzione in questo modo: add_alias some_alias
Grazie per il vostro feedback. In parallelo ho fatto qualche ricerca, e sì, hai ragione, quello che voglio non è del tutto possibile. La soluzione alternativa è scrivere uno script bash ed eseguirlo se necessario. Ma stavo pensando che modificare l'ambiente in fase di esecuzione può essere pericoloso, soprattutto se il server sta già eseguendo script "intensivi". –
@Andrei Ho provato a usare uno script bash per fare il sorgente, ma non ha funzionato neanche. – peacepassion