2010-04-07 13 views
2

Voici la situation. J'ai un script Jython 2.1 dans un compte partagé qui a besoin de savoir qui l'appelle. En bash, je peux simplement utiliser $ (who -m) et cela me donnera le nom d'utilisateur correct. Par "compte partagé", je veux dire que je me connecte moi-même, puis $ (sudo su - shared_account) pour accéder au compte partagé.Comment obtenir le nom d'utilisateur en Java (par exemple, qui -m en Java) (ou Jython 2.1)

Je n'ai pas pu trouver quoi que ce soit dans java (ou jython) qui me donnerait un résultat similaire. Même en essayant d'appeler Runtime.getRuntime(). Exec ("who -m") ne fait rien. Lorsque j'essaie de lire l'InputStream à partir du processus renvoyé par exec, le flux est vide.

+0

Lorsque vous dites * nom d'utilisateur *, faites-vous référence au nom d'utilisateur de connexion rapporté par le système d'exploitation? –

+0

Trier par. Si je me connecte en tant qu'amertune, alors 'sudo su - shared_account', je veux obtenir le nom d'utilisateur amertune (qui -m fait cela), pas le nom d'utilisateur shared_account. – amertune

Répondre

1

Je suis venu avec une option, même si je ne l'aime pas vraiment:

Ajouter ce drapeau à l'appel java:

-Duser.name="$(who -m | awk '{print $1}')" 

et l'accès, l'utilisateur nom avec:

System.getProperty('user.name') 
+0

@amertune, très jolie. Veuillez noter que j'ai mis à jour ma réponse avec un exemple pour getRunTime(). Exec(). –

+0

Bonne idée ... mais veuillez ** utiliser un autre nom de propriété **. D'autres programmeurs et autres programmeurs s'attendent à ce que la propriété '" user.name "' contienne le nom du propriétaire du processus. –

3

Pour obtenir le propriétaire du processus faire:.

System.getProperty("user.name"); 

La syntaxe de getRunTime() exec() est délicate.

Runtime.getRuntime().exec(new String[] {"/path/to/who", "-m"}); 
+1

Pas sûr (mais certainement trop fainéant pour vérifier), mais je pense que cela renvoie le propriétaire du processus, et pas le propriétaire de stdin (comme 'who -m') – Romain

+0

Exactement. J'essaie d'obtenir le nom du propriétaire de stdin (le compte auquel je me suis connecté à l'origine), pas le nom du propriétaire du processus (le compte auquel je suis passé avec sudo). – amertune

+0

@Romain, tu as raison, d'après les docs, c'est 'le nom du compte de l'utilisateur'. –

0

Vous pouvez simplement utiliser ceci.

System.out.println(System.getProperties().getProperty("user.name")); 
Questions connexes