Le manuel GNU Coreutils pourmv
dit:
-f --force Do not prompt the user before removing a destination file.
Cependant, cela semble déjà être le comportement par défaut de mv
, donc l' -f
option semble superflue. Par exemple, dans la version 4.3.11 de GNU Bash:
$ ls -l
total 0
$ touch 1 2; mv -f 1 2; ls
2
$ touch 1 2; mv 1 2; ls
2
Il semble peu probable que l'intention de l' -f
indicateur soit de remplacer alias mv="mv -i"
, car il existe plusieurs méthodes standard pour remplacer un alias (par exemple, utiliser \mv
) qui le feraient de manière plus concise et cohérente d'une commande à l'autre.
Le manuel indique que "Si vous spécifiez plusieurs options -i, -f, -n, seule la dernière prend effet", mais il semble toujours peu probable que le -f
drapeau ait pour objectif de remplacer le -i
drapeau en général, car un comportement équivalent peut être obtenu simplement en utilisant mv
, ce qui est beaucoup plus concis et compréhensible que d’utiliser mv -if
.
Cela étant, quel est le but du -f
drapeau? Pourquoi existe-t-il?
mount
, par exemple (même s’il existe de meilleurs exemples). Voulez-vous vraiment vous rappeler quelles sont les valeurs par défaut pour chaque option afin de pouvoir déterminer les options à définir? C’est une bonne chose d’avoir des options pour les valeurs par défaut et non par défaut. Vous pouvez donc définir explicitement l’option au lieu de devoir garder mentalement la trace de la valeur par défaut. Quelque chose , il est plus facile de se rappeler que quelque chose pas là .Réponses:
L’utilisation de
-f
est plus clairement décrite dans la page de manuel de 4BSD, à laquelle les-f
et-i
options ont été ajoutées:Une définition encore plus précise du fonctionnement de mv est donnée dans la norme POSIX , qui ajoute qu’elle
-f
ne remplace que-i
si elle se produit plus tard dans la ligne de commande.Donc, le comportement par défaut est un peu différent de
-f
. La valeur par défaut consiste à demander une confirmation uniquement lorsque la cible n'est pas accessible en écriture. (Ce comportement remonte au moins aussi loin que V4 , oùmv
n'a pas pris aucune option.) Si l'-i
option est donnée, mv demandera en outre une confirmation chaque fois que la cible existe. L'-f
option empêchera de demander dans ces deux cas (si cela se produit après l'un des deux-i
).la source
-f
indicateur avait été utilisé même s'il n'avait pas été utilisé .isatty(0)
). De plus, bien qu'il soit vrai qu'un dernier-f
remplace-i
, cela ne signifie peut-être pas qu'il en va de même si aucun argument n'est donné.C'est utile lorsque vous avez défini l'exécution de
mv
à une valeur par défaut:Lorsque vous voulez ensuite forcer un mouvement, cela fonctionnera:
Comme c'est la dernière option de la commande développée qui compte:
Ce point est également mentionné dans le manuel GNU Coreutils .
la source
alias mv="mv -i"
la raison en soit l'existence de-f
.mv(1)
(et d'autres commandes Unix) "insensé" comme vous l'-i
, je pense que quiconque a utilisé la ligne de commande pendant plus de quelques années a été gravémv
, à un moment ou à un autre.Il existe parce que (
man mv
)Ainsi, vous pouvez avoir un script / alias / fonction qui demande toujours, mais vous pouvez toujours remplacer l'option.
Une fonction / un script significatif ferait naturellement quelque chose de plus (par exemple, enregistre l'action).
la source
alias mv="mv -i"
soit la raison de l'existence de-f
. Vous mentionnez également les scripts et les fonctions. S'il vous plaît pourriez-vous donner des exemples en utilisant ces deux?mv -f
, je ne comprends donc toujours pas comment ils justifient / expliquent son existence. Désolé si je manque l'évidence!mv -i
. Si vous voulez les utiliser mais ignorez l'interaction, vous utiliserezMV -f
etc.mv
sans aucune de ces options est parfois de demander (terminal non inscriptible et interactif), donc ce serait une différence claire entremv -f
et\mv
.La
mv
commande en elle-même peut fonctionner différemment avec l'-f
option, en ce sens qu'elle tentera d'écraser les fichiers protégés en écriture sans invite.En raison des autorisations d'écriture dans le répertoire, l'utilisateur2 peut écraser les fichiers de l'utilisateur1
./dir/
, mais il sera averti avant de le faire.-f
empêche l'avertissement.la source
En programmation shell, l'utilisation de -f est un idiome courant utilisé pour s'assurer que vos commandes n'abandonnent pas avec des erreurs ou ne demandent pas au script / à l'utilisateur une réponse interactive lors de l'exécution de certaines commandes. La dernière chose que vous souhaitiez, c’est que votre script suspende son attente en attente de la saisie de l’utilisateur, voire pire, lorsqu’une commande erronée prenne la saisie en standard.
Remarque: l' annulation d'un alias peut provoquer / supprimer des effets secondaires. Si vous avez associé la commande à une autre version ou à des options supplémentaires, l'annulation de l'alias entraînera des effets secondaires indésirables. Par exemple, vous pouvez avoir un alias avec mv et rm pour utiliser une boîte de recyclage (ou un autre système de protection / suivi). Annuler l'alias va casser ça ...
la source
-f
option pour cp ou mv ne garantit pas qu’ils "fonctionnent". Par exemple, si l'autorisation est insuffisante, la commande -f ne le fera pas fonctionner. Ce que vous vouliez dire, c'est que -f force un écrasement sans invite. Le drapeau opposé -i signifie qu'il faut interactif lors du remplacement.isatty(0)
). Ainsi, par exemple, si votre script s'exécute dans le cadre d'un canal, il ne sera pas déclenché. 2.) L'ajout-f
n'est pas la même chose que l'annulation,-i
car ellemv -i -f
diffère demv
, voir la réponse de Mark .