Publié le :
Administration CREATION_INTERNE

Macro AHGrpipe - Exécution de commandes système distantes

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Cette macro utilise `rsubmit` pour soumettre du code à une session distante. Le code distant utilise la méthode `filename pipe` pour exécuter une commande Unix (ksh) après avoir configuré l'environnement (PATH, alias). Le résultat de la commande est lu via un `data _null_` et renvoyé à la session locale via `sysrput`. La macro gère également un cas particulier où la commande est déléguée à `%AHGsubmitrcommand`.
Analyse des données

Type : CREATION_INTERNE


Les données traitées proviennent de la sortie standard (stdout) d'une commande système exécutée via un pipe. Aucune table SAS externe n'est lue.

1 Bloc de code
MACRO CONTROL
Explication :
Gestion conditionnelle pour déléguer l'exécution ou préparation des variables macro pour le transfert vers la session distante via `%syslput`.
Copié !
1%IF &lmacro=q %THEN
2%DO;
3%AHGsubmitrcommand(cmd=&rcommand);
4%goto exit;
5%END;
6 
7%syslput rcommand=%bquote(&rcommand);
8%syslput lmacro=&lmacro;
9%syslput rmycmd=&rcommand;
10%syslput rformat=%str(&FORMAT);
11%syslput rdlm=%str(&dlm);
12%syslput rpiperesult=;
2 Bloc de code
DATA STEP Data
Explication :
Bloc `rsubmit` exécuté sur le serveur distant. Il initialise un `filename pipe` avec une configuration d'environnement spécifique (chemins hardcodés, shell ksh), exécute la commande, lit le résultat, et le renvoie à la session locale via `%sysrput`.
Copié !
1rsubmit;
2 
3 DATA _null_;
4 filename pip pipe "ksh -c %str(%')%bquote(. ~liu04/bin/myalias; PATH=/home/liu04/bin:/opt/sasprod:/usr/sbin:/etc:/usr/local/bin:/usr/bin:/bin:/usr/dt/bin:/usr/openwin/bin:/usr/ucb:.:/home/liu04/bin/perl;FPATH=/home/liu04/bin;)&rmycmd %str(%') " ;
5 INFILE pip truncover lrecl=32767;
6 LENGTH file $32767;
7 INPUT file 1-32767;
8 myfile=put(translate(file,"&rdlm",byte(12)),&rformat);
9 call symput("rpiperesult",trim(compbl(myfile)));
10 RUN;
11 %put lmacro=&lmacro;
12 %nrstr(%%)sysrput &lmacro=%nrbquote(&rpiperesult);
13endrsubmit;
3 Bloc de code
MACRO UTILITY
Explication :
Post-traitement local du résultat : nettoyage des caractères de contrôle et affichage optionnel dans la log.
Copié !
1%IF %LENGTH(&&&lmacro) %THEN %let &lmacro=%sysfunc(translate(&&&lmacro,%str( ),%sysfunc(byte(12))));
2 
3 
4%IF %upcase(&PRINT)=YES %THEN %put %nrbquote(&&&lmacro);
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« La macro AHGrpipe illustre une technique avancée d'administration et de développement : l'interopérabilité fluide entre une session SAS locale et un environnement Unix distant. En combinant l'instruction RSUBMIT et le moteur PIPE, elle permet non seulement d'exécuter des commandes système sur un serveur tiers, mais surtout de capturer leur résultat pour alimenter dynamiquement la logique macro du client. »