Как выполнить команду Bash и выполнить два оператора при отказе?

Использование этих двух отличается.

Для lsof, для показа открытых файлов для определенного пути только поместить -- перед каждым путем

lsof -- /home4
lsof -- /home4 -- /home2

lsof покажет весь открытый файл, содержащий путь.

Для fuser, с другой стороны, покажите процесс, открывающий файл, который Вы указали

fuser -uv <filename> 

Для показа процессов, получающих доступ к конкретному пути, использовать -m

fuser -uvm /home3

fuser более полезно в идентификации идентификатора процесса, открывающего конкретный файл.

lsof полезно для обнаружения всего файла (файлов), открытого конкретным процессом.

6
22.02.2018, 18:57
1 ответ
ssh user@1.2.3.4 "ls /home/somefile" || { echo "File does not exist"; exit 1; }

Это называют составной командой. От man bash:

   Compound Commands
       A compound command is one of the following:

       (list) list  is  executed in a subshell environment (see COMMAND EXECU‐
              TION ENVIRONMENT below).  Variable assignments and builtin  com‐
              mands  that  affect  the  shell's  environment  do not remain in
              effect after the command completes.  The return  status  is  the
              exit status of list.

       { list; }
              list  is simply executed in the current shell environment.  list
              must be terminated with a newline or semicolon.  This  is  known
              as  a  group  command.   The return status is the exit status of
              list.  Note that unlike the metacharacters ( and ), { and }  are
              reserved words and must occur where a reserved word is permitted
              to be recognized.  Since they do not cause a  word  break,  they
              must  be  separated  from  list  by  whitespace or another shell
              metacharacter.

() синтаксис, вероятно, не работал бы в Вашей ситуации, потому что команды будут выполняться в подоболочке, и затем exit просто закрыл бы подоболочку.

Править: объяснить различие между круглыми скобками () и фигурные скобки {}:

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

Фигурные скобки вместо этого заставляют команды быть оцененными в текущей оболочке. Теперь exit уничтожает текущую оболочку, которая была бы, например, предпочтительна, если Вы используете эту строку сценарий оболочки.

14
27.01.2020, 20:22
  • 1
    Каково различие между использованием вокруг и другими скобками? –  Alex 27.01.2014, 18:24
  • 2
    @Alex, что это говорит в ответе, первое, выполняется в отдельной подоболочке, в то время как второе выполняется в той же оболочке, Вы находитесь в. –  terdon♦ 27.01.2014, 18:26

Теги

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