2011-01-03 39 views
11

Chcę utworzyć alias dla pagsh, który natychmiast dostarczy mi bilet administratora Kerberos.Bash, wykonaj polecenie, ale kontynuuj sesję interaktywną

Problem polega na tym, że nie mogę określić, jak uruchomić polecenie, aby uruchomić bash, ale nadal kontynuować sesję interaktywną po wykonaniu polecenia.

Mój obecny strzał jest:

alias admin=pagsh -c "bash -c \"kinit [email protected]\"" 

ale bash logicznie kończy się tuż po kinit jest wykonywana. Jak mogę wcisnąć niestandardowe polecenie w żebranie sesji interaktywnej bash? I jeszcze trzeba uruchomić .bashrc normalnie, dlatego nie mogę używać --rcfile

Odpowiedz

10

Moja rada będzie za pomocą niestandardowego bashrc złożyć --rcfile że źródeł .bashrc, ex:

alias admin=pagsh -c "bash --rcfile myrc"

myrc:

source ~/.bashrc 
kinit [email protected] 
+1

Och, jestem taki głupi :-D To świetny pomysł. –

+0

Cieszę się, że mogę pomóc :) – OneOfOne

+0

Zakładam, że powinien przeczytać 'alias admin = pagsh -c" bash --rcfile myrc "' tj. bash zamiast bashrc –

1

Co powiesz na następujące?

alias admin='pagsh -c "bash -c \"kinit [email protected]; exec bash\""' 

lub nawet

alias admin='pagsh -c "kinit [email protected]; exec bash"' 

może działać. (Nie posiadam działającego środowiska openafs, aby przetestować to poprawnie.)

2

Jeśli potrzebujesz tylko jednej lub dwóch linii, możesz użyć funkcji "bash" w trybie "Process Substitution" [1], aby podać ją bezpośrednio linia wywoławcza. na przykład (Uruchomić ciachnięcie w określonym pytona virtualenv)

bash --rcfile <(echo '. ./pyvenv/bin/activate') 

wiele linii nie jest problemem, ani nie wykorzystuje vars lub pomocników:

bash --rcfile <(echo echo "Starting at `date`"; echo cd $HOME) 

[1] man bash i szukanie „podstawienie Process ". Zauważ, że nie jest to obsługiwane na wszystkich systemach, ale powinno działać na wszystkich systemach Linux.

Powiązane problemy