“~ / Desktop / test.txt: nessun file o directory”

Ho scritto questo script:

#!/bin/bash file="~/Desktop/test.txt" echo "TESTING" > $file 

Lo script non funziona; mi dà questo errore:

 ./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory 

Che cosa sto facendo di sbagliato?

Prova a sostituire ~ con $HOME . L’espansione delle tilde si verifica solo quando la tilde non è quotata. Vedi info "(bash) Tilde Expansion" .

Si potrebbe anche fare file=~/Desktop senza citarlo, ma se si sostituisce una parte di questo con qualcosa con un separatore di campo, allora si romperà. Citando i valori delle variabili è probabilmente una buona cosa prendere l’abitudine di comunque. Anche quotando file=~/"Desktop" variabile file=~/"Desktop" funzionerà, ma penso che sia piuttosto brutto.

Un altro motivo per preferire $HOME , quando ansible: l’espansione delle tilde avviene solo all’inizio delle parole. Quindi command --option=~/foo funzionerà solo se il command esegue l’espansione tilde stessa, che varierà in base al comando, mentre il command --option="$HOME/foo" funzionerà sempre.

Cordiali saluti, puoi anche usare eval :

 eval "echo "TESTING" > $file" 

L’ eval prende il comando come argomento e fa sì che la shell faccia l’ espansione di Tilde .