combinaison de commandes sur le terminal sur Mac OS X


18

Je voudrais écrire ce qui suit sur une ligne du terminal ou s'il existe un moyen plus court de créer un fichier et de définir les autorisations, veuillez commenter.

sudo touch .htaccess
sudo chmod 766 .htaccess

Très appréciée

Réponses:


31

Utilisez '&&' pour exécuter conditionnellement la deuxième commande si la première réussit.

sudo touch .htaccess && sudo chmod 766 .htaccess


2
Je préfère cette solution pour deux raisons: 1. &&est généralement meilleure que ;si elle s'arrête si la première commande échoue, 2. il est généralement préférable d'exécuter uniquement le programme spécifique nécessaire sudo, plutôt que d'essayer de les combiner en une seule sudoinvocation et exécution plus de code avec des privilèges élevés que nécessaire.
Chris Page

Que se passe-t-il si je veux le faire scp admin@host.com:file1 && scp admin@host.com:file2 && scp admin@host.com:file3et que j'ai défini un mot de passe sur ma clé SSH, il me demande tout le temps un mot de passe, existe-t-il un moyen de le combiner ???
Akshay Khale

2

Non, ça ne l'est pas.

La seule chose que vous pouvez faire, vous pouvez combiner ces deux commandes en une seule sudo:

sudo sh -c 'touch .htaccess && chmod 766 .htaccess'

Autre solution (sans un seul appel externe, mais aussi avec deux commandes):

sudo sh -c 'umask 011 && touch .htaccess'

1
Bonnes suggestions, mais je les réviserais pour les utiliser &&au lieu de ;, cependant. De plus, en général, j'utiliserais simplement deux sudocommandes, car il est exagéré et plus risqué d'exécuter un shell entier avec des privilèges élevés, plutôt que juste les programmes exacts qui doivent s'exécuter avec eux (dans ce cas, touch et chmod).
Chris Page

Oui, vous avez raison, ce serait mieux
Igor Chubin

1

Les points-virgules vous permettent de placer plusieurs commandes sur une seule ligne comme ceci:

sudo touch .htaccess; sudo chmod 766 .htaccess


1
C'est une bonne suggestion, bien que ce soit une bonne idée de prendre l'habitude d'utiliser &&plutôt que d' ;exécuter des commandes interdépendantes afin qu'elle s'arrête si une commande échoue.
Chris Page

0

séparez les commandes par un point-virgule. (;)

Exemple

echo firstname; echo lastname;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.