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

Derren
la source

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

balai
la source
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 [email protected]:file1 && scp [email protected]:file2 && scp [email protected]: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'
Igor Chubin
la source
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

Vickash
la source
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;
Chetan Laddha
la source