объединение команд на терминале в 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.