Как делают меня оценка две команды?

/dev/tty0 на Linux текущий виртуальный терминал, в то время как /dev/tty1, /dev/tty2... отдельные виртуальные терминалы.

Можно получить дамп содержания каждого через /dev/vcs1, /dev/vcs2... устройства или текущее с /dev/vcs (иногда /dev/vcs0)

# cp /dev/vcs1 some-file
# stty size < /dev/tty1
67 240
# fold -w 240 < some-file | sed 's/ *$//'
[...]
X.Org X Server 1.12.4
Release Date: 2012-08-27
X Protocol Version 11, Revision 0
Build Operating System: Linux 3.2.0-4-amd64 x86_64 Debian
Current Operating System: Linux sc 3.10-2-amd64 #1 SMP Debian 3.10.7-1 (2013-08-17) x86_64
Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.10-2-amd64 root=/dev/mapper/linux-debian64 ro quiet
Build Date: 17 April 2013  10:22:47AM
xorg-server 2:1.12.4-6 (Julien Cristau <jcristau@debian.org>)
Current version of pixman: 0.30.2
    Before reporting problems, check http://wiki.x.org
    to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
    (++) from command line, (!!) notice, (II) informational,
    (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.1.log", Time: Mon Sep  2 10:19:44 2013
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
resize called 1920 1080
[...]
3
15.04.2018, 00:08
2 ответа
[1128816] В [1129348]$(echo "echo 'a'; echo 'b'")[1129349] оболочка видит замену команды. И все. Итак, это будет простая команда, аргументы которой являются результатом оператора split+glob при расширении подстановки команды.

Оболочка примет вывод [1129350]эхо "echo 'a'; echo 'b'"[1129351], в данном случае [1129352]echo 'a'; echo 'b' \n[1129353], удалит символы "trailing newline" так, чтобы стало [1129354]эхо 'a'; эхо 'b'[1129355], разделив это в соответствии со значением переменной [1129356]$IFS[1129357]. 

Если [1129358]$IFS[1129359] не был изменен по умолчанию, то это будет 4 слова: [1129360] echo[1129361], [1129362]'a'; [1129363], [1129364] echo[1129365] и [1129366]'b'[1129367]. Каждое из этих слов будет подвержено глобусу. Здесь ни одно из этих слов не содержит глобусных символов, поэтому эти слова останутся такими, какие они есть.

 Итак, у нас есть 4 аргумента для выполнения простой команды. Первый аргумент будет использован для получения команды на выполнение. [1129368]echo[1129369] встроено в большинство оболочек. Поэтому оболочка командной строки вызовет свой [1129370]echo[1129371] встроенный с этими 4 аргументами.

echo[1129373] игнорирует свой первый (0-й) аргумент и выводит остальные, разделенные пробелами и завершенные символом новой строки. Некоторые реализации [1129374]echo[1129375] расширяют экранирующие последовательности обратного слеша, но здесь их нет. Поэтому [1129376]echo[1129377] выдаст: Если вы хотите, чтобы эта строка интерпретировалась как код оболочки, используйте [1129378]eval[1129379]:

Это также распознается как простая команда. Из-за кавычек оболочка видит два "слова": [1129380]eval[1129381] и [1129382]echo 'a'; echo 'b'[1129383]. Опять же, они будут составлять аргументы к команде, которая является производной от первой.
Здесь команда является командой построения оболочки [1129384]eval[1129385]. И снова, [1129386]eval[1129387] игнорирует свой первый аргумент. Что она делает, так это конкапсулирует остальные аргументы (здесь только один) с пробелами и интерпретирует полученную строку как код оболочки. При интерпретации

оболочка видит нецитируемый [1129388];[1129389], который разделяет команды. Первая команда интерпретируется как простая команда, которая заканчивается вызовом [1129390]echo[1129391] с двумя аргументами... и т.д.[1128833].
7
27.01.2020, 21:12
if eval "( service networking restart &> /dev/null   &&   ping -c3 google.com &> /dev/null )"; then      
   echo "service is running"                              
else  
   echo "service is not running"    
fi
0
27.01.2020, 21:12

Теги

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