объединение команд на терминале в Mac OS X

18

Я хотел бы написать следующее в одной строке в терминале или, если есть более короткий способ создать файл и установить права доступа, тогда, пожалуйста, оставьте комментарий.

sudo touch .htaccess
sudo chmod 766 .htaccess

Очень признателен

Derren
источник

Ответы:

31

Используйте '&&' для условного запуска второй команды, если первая успешна.

sudo touch .htaccess && sudo chmod 766 .htaccess

broomdodger
источник
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

Vickash
источник
1
Это хорошее предложение, хотя стоит привыкнуть использовать &&вместо ;выполнения взаимозависимых команд, чтобы оно останавливалось в случае сбоя команды.
Крис Пейдж
0

разделите команды точкой с запятой. (;)

пример

echo firstname; echo lastname;
Четан Ладдха
источник