Тот же сценарий, открытый тремя разными способами, дает три разных результата. Зачем? [Дубликат]

12.04

F1, похоже, ничего не делает из коробки 12.04 F10 появляется, чтобы имитировать щелчок правой кнопкой мыши. Поэтому в ответ на специфику вопроса нет необходимости отключать помощь и уведомления.

Вы все равно можете сопоставить их с чем-то еще следующим: Сопоставление горячих клавиш в 12.04 выполняется просто с помощью виджета Keyboard.

В Unity Launcher найдите клавиатуру. В открывшемся окне выберите вкладку ярлыков и пользовательские ярлыки. Нажмите «Добавить», чтобы добавить новый ярлык. Назовите его так, чтобы он соответствовал функциональным возможностям, которые вы ему назначили. Введите команду, которую вы хотите запустить в команде. В правой части окна щелкните, где указано, что отключено. Это должно переключиться на новый ускоритель. Теперь просто нажмите F1 . Выбранный ускоритель Custom Shortcuts переопределяет поведение моделирования правой кнопкой мыши. Вы можете установить эту команду в echo 'nope' > /dev/null, если хотите, чтобы ваш F10 ничего не делал.

1
задан 13 April 2017 в 15:23

2 ответа

sh является символьной ссылкой на оболочку dash и выдает синтаксическую ошибку, потому что в sh синтаксисе нет <( . . .). Это только в bash (и в zsh и ksh, если я правильно помню). bash выводит желаемый результат, потому что он находится в правильном синтаксисе bash, ничего неправильного там ./ дает ошибку с разрешением отказа, потому что вы в основном говорите «Эй, оболочка, посмотрите на разрешения этого файла и посмотрите на первую строку (ту, у которой есть #!/bin/bash) в моем текущем каталоге и выяснить, как запустить этот скрипт для меня ». (обратите внимание: если у вас был скрипт в месте, включенном в вашу переменную $PATH, то вы просто запустили myScriptName.sh, и все, но идея была бы такой же, нам нужно проверить права администратора и какой интерпретатор для использования)

Перед тем, как вы запустили bash и dash и сказали им прочитать команды из файла. bash и dash исполняются на этот раз, а не сценарий. Скрипт теперь является источником команд, параметр. Разрешения на чтение всегда установлены для всех пользователей, поэтому оболочки будут читать его.

5
ответ дан 23 May 2018 в 14:47
  • 1
    @kos Я продолжаю забывать zhs, потому что я не активно его использую \ (-_-) /. , , еще нет . , , – Sergiy Kolodyazhnyy 26 December 2015 в 16:09

В общем случае sh, ash, dash, bash, csh, tcsh, zsh ... - все оболочки с их собственными синтаксисами и характеристиками. Есть некоторая совместимость, но они ориентированы [1]: оболочка bash выполнит скрипт sh, но не говорит наоборот. Для вызова sh требуется меньше ресурсов, чем bash. Для одного экземпляра это не проблема, для тысяч это должно быть.

Способы выполнения. Чтобы выполнить файл как программу под Linux, и если это скрипт или скомпилированный, он должен быть установлен ориентированный [1] , и он должен быть включен в один из каталогов вашего $PATH.

Если это скрипт, он может быть передан как аргумент относительной оболочке (sh, bash ... myfile.whatever): если он передан в Способы выполнить , вы можете получить неверное поведение, и если вам повезет ошибка; в этом случае он не должен исполняться, потому что это похоже на то, что вы пишете строки, написанные внутри скрипта, непосредственно в новой оболочке, которую вы вызываете. Для выполнения в той же оболочке вы можете использовать source myfile или . myfile, которые эквивалентны для записи по строкам в текущей оболочке содержимого сценария.

, если вам повезло ошибка Если исполняемая программа не включена в ваш путь, вы должны указать, где ее можно найти.

В вашем случае ./ означает только текущий каталог вашей оболочки, а также ~/myfile.whatever должен обратиться к файлу myfile.whatever в вашем домашнем каталоге ~/. Вы можете вызвать его из другого места, например, с помощью /home/$USER/dir/myfile.whatever. Если этот файл находится внутри каталога, включенного в ваш путь, вы можете вызвать его с помощью простого myfile.whatever.

В случае, если более одного исполняемого файла имеют одно и то же имя, указание полного пути будет уверенным, какой из них вы собираетесь выполнить. which mycommand может сказать вам, какой из них будет выполнен (функция, псевдоним, встроенный или первый найденный на вашем пути), но он не может сказать, какой из них будет выполнен в будущем или у другого пользователя , Если вы прямо напишите полный путь, вы устраните эту двусмысленность. Полезно выполнять определенную версию программы, когда они устанавливаются больше одного в одно и то же время ... и во избежание троянов. В сценарии всегда рекомендуется писать /bin/bash вместо bash.

3
ответ дан 23 May 2018 в 14:47

Другие вопросы по тегам:

Похожие вопросы: