комбінування команд на терміналі в Mac OS X


18

Я хотів би написати наступне в одному рядку в терміналі або якщо є коротший спосіб створити файл і встановити дозволи, то, будь ласка, прокоментуйте.

sudo touch .htaccess
sudo chmod 766 .htaccess

Цінується

Відповіді:


31

Використовуйте "&&", щоб умовно запустити другу команду, якщо перша успішна.

sudo touch .htaccess && sudo chmod 766 .htaccess


2
Я вважаю за краще це рішення з двох причин: 1. &&як правило, краще, ніж ;так, що воно зупиняється, якщо перша команда не працює, 2. загалом краще лише запускати потрібну програму sudo, а не намагатися поєднувати їх в одне sudoвиклик та запуск більше коду з підвищеними привілеями, ніж потрібно.
Кріс Пейдж

Що робити, якщо я хочу це зробити, scp admin@host.com:file1 && scp admin@host.com:file2 && scp admin@host.com:file3і я встановив пароль на своєму ключі SSH, він весь час просить мене пароль, чи є спосіб його комбінувати ???
Акшай Хале

2

Ні, це не.

Єдине, що ви можете зробити, ви можете об'єднати ці дві команди в одну sudo:

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

Ще одне рішення (з одним зовнішнім дзвінком, але також з двома командами):

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

1
Хороші пропозиції, але я хотів би переглянути їх, щоб використовувати &&замість цього ;. Крім того, загалом я б просто скористався двома sudoкомандами, оскільки це зайвий і ризикований запуск цілої оболонки з підвищеними привілеями, а не лише точні програми, які потрібно запускати з ними (у цьому випадку touch і chmod).
Кріс Пейдж

Так, ви маєте рацію, було б краще
Ігор Чубін

1

Точка з комою дозволить вам встановити кілька команд у одному рядку, як це:

sudo touch .htaccess; sudo chmod 766 .htaccess


1
Це гарна пропозиція, хоча добра ідея ввійти в звичку використовувати &&замість того, ;щоб виконувати взаємозалежні команди, щоб вона зупинялась, якщо команда не вдається.
Кріс Пейдж

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.