Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ajout sans redirections

12 réponses
Avatar
devloop
Bonjour
J'ai une question un peu casse-tête..

Je souhaiterais ajouter une ligne à un fichier par le biais d'une commande, mais cette commande ou suite de commandes doit respecter plusieurs régles

- pas de redirection
- pas de mode interractif (comprendre on n'a droit de tapper qu'une seule fois sur la touche entrée
- la manip doit pouvoir se faire même si le fichier est vid
- utilisation de programmes standard

J'ai essayé plusieurs trucs avec VI, sed etc mais je n'ai rien trouv
Le top serais une commande du type
editeur --apend "ma_ligne" mon_fichie

Si quelqu'un a une solution, merci d'avance

--
devloop

-----------------------------------------------------------------------
Voir theme: http://www.frbox.net/viewtopic-458305.htm

Envoyé de http://www.frbox.ne

10 réponses

1 2
Avatar
Nicolas George
devloop wrote in message :
- pas de redirections


- la commande ne doit pas contenir les lettres u, n, i et x.

- pas de mode interractif (comprendre on n'a droit de tapper qu'une seule
fois sur la touche entrée)


... avec une perche de dix mettres en Lego technic(tm) contrôlée par un
moteur 4,5 V.

- la manip doit pouvoir se faire même si le fichier est vide


- la manip doit pouvoir se faire même si le fichier n'existe pas, dans un
répertoire appartenant à un autre utilisateur situé sur un CD.

- utilisation de programmes standards


... disponible dans l'installation par défaut de GEMDOS.

Non, sérieusement, qui impose ces contraintes débiles ? Les trois dernières
sont tout à fait raisonnables, évidemment, c'est le cahier des charges, mais
la première est complètement absurde.

Avatar
Pascal Bourguignon
devloop writes:

Bonjour,
J'ai une question un peu casse-tête...

Je souhaiterais ajouter une ligne à un fichier par le biais d'une
commande, mais cette commande ou suite de commandes doit respecter
plusieurs régles :

- pas de redirections
- pas de mode interractif (comprendre on n'a droit de tapper qu'une
seule fois sur la touche entrée)
- la manip doit pouvoir se faire même si le fichier est vide
- utilisation de programmes standards

J'ai essayé plusieurs trucs avec VI, sed etc mais je n'ai rien trouvé
Le top serais une commande du type :
editeur --apend "ma_ligne" mon_fichier

Si quelqu'un a une solution, merci d'avance.


Un jour j'ai gagné une bouteille de champagne avec une connerie comme
ça. J'espère que ce n'est pas pour des prunes:

clisp -x '(with-open-file (out "fichier" :if-does-not-exist :create :if-exists :append :direction :output) (format out "nouvelle ligne ~%"))'

Si on te dit que clisp n'est pas standard:

wget ftp://ftp.gnu.org/pub/gnu/clisp/release/2.33.2/clisp-2.33.2.tar.gz ; tar zxf clisp-2.33.2.tar.gz ; cd clisp-2.33.2 ; ./configure ; make ; make install ; clisp -x '(with-open-file (out "fichier" :if-does-not-exist :create :if-exists :append :direction :output) (format out "nouvelle ligne ~%"))'


--
__Pascal Bourguignon__ http://www.informatimago.com/
Our enemies are innovative and resourceful, and so are we. They never
stop thinking about new ways to harm our country and our people, and
neither do we. -- Georges W. Bush

Avatar
drkm
Pascal Bourguignon writes:

wget ftp://ftp.gnu.org/pub/gnu/clisp/release/2.33.2/clisp-2.33.2.tar.gz ; tar zxf clisp-2.33.2.tar.gz ; cd clisp-2.33.2 ; ./configure ; make ; make install ; clisp -x '(with-open-file (out "fichier" :if-does-not-exist :create :if-exists :append :direction :output) (format out "nouvelle ligne ~%"))'


Et :

wget ftp://ftp.gnu.org/pub/gnu/clisp/release/2.33.2/clisp-2.33.2.tar.gz ; tar zxf clisp-2.33.2.tar.gz ; cd clisp-2.33.2 ; ./configure --prefix=~/local ; make ; make install ; clisp -x '(with-open-file (out "fichier" :if-does-not-exist :create :if-exists :append :direction :output) (format out "nouvelle ligne ~%"))'

pour ne pas obliger à être root.

'wget', c'est standard ? (ça veut dire quoi « programme
standard » ? POSIX ?)

--drkm

Avatar
Pascal Bourguignon
drkm writes:

Pascal Bourguignon writes:

wget ftp://ftp.gnu.org/pub/gnu/clisp/release/2.33.2/clisp-2.33.2.tar.gz ; tar zxf clisp-2.33.2.tar.gz ; cd clisp-2.33.2 ; ./configure ; make ; make install ; clisp -x '(with-open-file (out "fichier" :if-does-not-exist :create :if-exists :append :direction :output) (format out "nouvelle ligne ~%"))'


Et :

wget ftp://ftp.gnu.org/pub/gnu/clisp/release/2.33.2/clisp-2.33.2.tar.gz ; tar zxf clisp-2.33.2.tar.gz ; cd clisp-2.33.2 ; ./configure --prefix=~/local ; make ; make install ; clisp -x '(with-open-file (out "fichier" :if-does-not-exist :create :if-exists :append :direction :output) (format out "nouvelle ligne ~%"))'

pour ne pas obliger à être root.


En effet, mais j'ai les droits en écriture sur /usr/local sans être root :-)

'wget', c'est standard ? (ça veut dire quoi « programme
standard » ? POSIX ?)



--
__Pascal Bourguignon__ http://www.informatimago.com/
In deep sleep hear sound,
Cat vomit hairball somewhere.
Will find in morning.


Avatar
drkm
Pascal Bourguignon writes:

En effet, mais j'ai les droits en écriture sur /usr/local sans
être root :-)


J'espère que la question du PO n'est pas pour un examen
d'embauche en tant qu'administrteur système :-)

--drkm

Avatar
drkm
Rakotomandimby Mihamina writes:

PATH=~/local/bin; # Sinon il ne le trouvera pas


Yep, bien vu (comme je me sers de ~/local, j'ajoute ce
répertoire au $PATH dans mon ~/.profile). Merci.

--drkm

Avatar
Stephane Chazelas
2005-07-9, 16:25(+02), devloop:
Je souhaiterais ajouter une ligne à un fichier par le biais d'une commande, mais cette commande ou suite de commandes doit respecter plusieurs régles :

- pas de redirections
- pas de mode interractif (comprendre on n'a droit de tapper qu'une seule fois sur la touche entrée)
- la manip doit pouvoir se faire même si le fichier est vide
- utilisation de programmes standards
[...] [tes lignes sont trop longues]


Si le probleme est juste que tu dois fournir une
ligne de commande qui n'est pas une ligne de commande shell
comme dans le -exec de find, tu peux lancer le shell toi-meme:

1er argument "sh", 2e "-c", 3e "echo blah >> fichier".

find . ... -exec sh -c 'echo blah >> "$1"' {} {} ;

--
Stéphane

Avatar
cedric
Quelquechose comme ca, avec gnu sed :

sed -ie '$ama_ligne' mon_fichier
Avatar
Pascal Bourguignon
cedric writes:
Quelquechose comme ca, avec gnu sed :

sed -ie '$ama_ligne' mon_fichier


Ah oui, mais non. -i c'est pas standard:

$ ma_ligne="ALEA IACTA EST";sed -ie "a$ma_ligne" mon-fichier
sed: invalid option -- i


Et j'ai GNU sed:

$ sed --version
GNU sed version 3.02.80


--
__Pascal Bourguignon__ http://www.informatimago.com/
Cats meow out of angst
"Thumbs! If only we had thumbs!
We could break so much!"

Avatar
cedric
Pascal Bourguignon wrote:
sed -ie '$ama_ligne' mon_fichier


Ah oui, mais non. -i c'est pas standard:

$ ma_ligne="ALEA IACTA EST";sed -ie "a$ma_ligne" mon-fichier
sed: invalid option -- i

Et j'ai GNU sed:

$ sed --version
GNU sed version 3.02.80



$ sed --version
GNU sed version 4.1.2

argh.

Sinon, il faut un '$' _avant_ le (a)ppend, pour sélectionner la dernière
ligne. Ca aussi, ce n'est pt'êt' pas bien standard ... :)


1 2