Newsgroup: it.comp.os.linux.iniziare
Titolo: eseguire più comandi sullo stesso file

$ cat test.sh
#!/bin/bash
command_file() {
     "$@" /tmp/tmp.e7u4WkwwbE/file
}
set -v
command_file cat
command_file df
command_file ls
command_file echo abc >
 
$ ./test.sh
command_file cat
xyz
command_file df
File system    1K-blocchi    Usati Disponib. Uso% Montato su
/dev/nvme0n1p5  100267080 43465928  51664768  46% /
command_file ls
/tmp/tmp.e7u4WkwwbE/file
command_file echo abc >
./test.sh: riga 8: errore di sintassi vicino al token non atteso "newline"
./test.sh: riga 8: `command_file echo abc >'
 
Come vedete con l'ultimo comando c'è qualche problema.
Ho provato anche così
 
command_file "echo abc >"
./test.sh: riga 3: echo abc >: comando non trovato
 
ma non funziona.
 
L'unico modo è fare tutto in modo tradizionale (manualmente)
 
$ echo abc > /tmp/tmp.e7u4WkwwbE/file
 
e così funziona, e certo :D
 
Ma non ci sarebbe quindi una soluzione per applicare allo stesso file 
qualunque comando senza digitare il nome (/tmp/tmp.e7u4WkwwbE/file)?
Sarebbe una soluzione molto comoda quando si vuole lavorare su un file 
che si usa molto spesso.

In date: Tue, 15 Sep 2020 10:20:40 on group: it.comp.os.linux.iniziare,

Non so perchè usi quell'approccio nella funzione...
Comunque in questo modo qui sotto va...
 
 
------[CUT]--------------
#!/bin/bash
command_file() {
#  NO BUONO
#    "$@" /tmp/pippo-file
 
#  BUONO
printf -v fegatino '%s %s' "$@" "/tmp/pippo-file"
eval "$fegatino"
echo ; echo
}
 
echo pluto > /tmp/pippo-file
 
set -v
command_file cat
command_file df
command_file ls
command_file 'echo abc >'
command_file cat
------[CUT]--------------
 
 
 
./test
command_file cat
cat /tmp/pippo-file
pluto
 
 
command_file df
df /tmp/pippo-file
Filesystem     1K-blocks  Used Available Use% Mounted on
tmpfs            1496444    68   1496376   1% /tmp
 
 
command_file ls
ls /tmp/pippo-file
/tmp/pippo-file
 
 
command_file 'echo abc >'
echo abc > /tmp/pippo-file
 
 
command_file cat
cat /tmp/pippo-file
abc
 
 
------------------
 
Vedi anche la risposta all'altro tuo quesito.
L'uso di 'printf' (man bash) secondo me ti risolve tantissimi problemi....
 
NOTA che l'errore ti viene in quanto 'echo abc >' viene interpretato come
comando e non come parametro da mettere nella funzione. Va quindi messo tra
apici (doppi o meglio singoli).
 

Il 20/09/20 10:33, BIG Umberto ha scritto:

$ cat test
printf \
     -v command \
     '"%s" "%s"' \
     "$@" \
     "x y z"
eval "$command"
 
$ bash test "echo abc >"
test: riga 6: echo abc >: comando non trovato
 

 
 
_____________________________________________
 
Cazzo! '%s %s'  è la sintassi per espandere in formato stringa, con gli apici
doppi è tutta un'altra cosa!
 
$ ls
v2
 
$ cat v2
printf \
    -v command \
    '%s %s' \
    "$@" \
    "x y z"
eval "$command"
 
$ ./v2 "echo abc >"
 
$ ls
v2  x
 
$ cat x
abc y z
 
 
 
 
 
 
 
 
-- 
Nell'intelligenza artificiale siamo ancora agli inizi...
La DEFICIENZA artificiale L'abbiamo già realizzata.
...E la stiamo ottimizzando!

 }
 
Non si fanno queste cose.
Anche perche` sono perfettamente inutili.
 
Cosa stai facendo? Stai riscrivendo il
linguaggio di "bash"?
Esiste gia` di suo, usalo.
 
bye,
 
-- 
 
piergiorgio