Иногда мне нужно выполнить одну команду из сценария оболочки.
Я уже знаю, sed -n 'line_num p'
может напечатать эту строку. Но как я могу выполнить эту распечатанную строку как команду?
bash
command-line
Zen
источник
источник
line_num
иp
, например, еслиline_num
это 123, то вы можетеsed -n 123p | bash
. И если этогоsh
достаточно, то просто используйтеsh
вместоbash
.sed -n 'line_num p' | sh
может быть другое решение? У этого больше совместимости?sh
самом деле. На Debian (и производных) системахsh
это обычноdash
. Если сценарий написан дляdash
(или иным образом основан на переносимом синтаксисе), то, вероятно, да, но если он написан для,bash
то почти наверняка нет.history
и вижу, что хочу запустить строку 900, могу ли я как-нибудь запустить строку 900?Если вы делаете это в интерактивном режиме, вы можете написать строку в истории Bash:
Затем нажмите, ↑Enterчтобы вставить строку в буфер readline и выполнить ее; это дает вам возможность взглянуть на линию, пока не стало слишком поздно.
источник
man history
history
встроенный, так что задокументированhelp history
(илиman bash
, но это много читается). Цитируя вышеизложенное,history -s
«добавлю ARG в список истории как одну запись»Ты можешь сделать...
Это позволит получить только
$NUM
строку из вашего скрипта в переменной оболочки$line
и затем оценить ее как команду в текущей оболочке.Другой способ сделать это может выглядеть так:
источник
eval
.gnu sed
имеетe
флаг, чтобы что-то вродеsed "${NUM}"'!d;s/^//e;q'
бы тоже работалоВы редактируете свой скрипт с помощью vim (vi в Linux)? В vi добавьте отображение:
а потом, когда вы находитесь на интересной линии в vi нажмите F4
источник
В bash вы можете запустить следующую команду:
источник