Развернуть subshell перед его выполнением?


11

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

Например, как я могу развернуть следующую командную строку перед ее запуском, чтобы я мог редактировать результаты подоболочки?

например

$ find -name "test.txt" 
/tmp/test.txt

$ mv $(!!) /tmp/new.txt

Я бы хотел увидеть расширение оболочки до запуска команды, например:

$ mv /tmp/test.txt /tmp/new.txt

Есть ли способ сделать это?


1
Zsh может сделать это, но я вполне уверен, что Bash не может. В zsh, если вы наведите курсор на параметр и нажмете TAB, он расширит его
Патрик

С тех пор я перешел на, zshи это здорово, и делает это, как вы предлагаете ... хороший совет! Я оставлю оригинальный ответ здесь, так как это был bashвопрос.
Брэд Паркс

Ответы:


5

shell-expand-line( \e\C-e) расширяет подстановки команд в bash.

$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line

$(!!)\e\C-e снова запустит предыдущую команду и вставит вывод:

"\eo": "$(!!)\e\C-e"

Это также расширяет другие подстановки команд, но нет такой команды, как shell-expand-word.

В bash 4.0 или более поздней версии вы также можете включить globstar, ввести **/file.txtи использовать glob-complete-word( \eg) или glob-expand-word( \C-x*).


2

Вот полезный трюк - добавьте эту строку в ~ / .inputrc (создавая файл при необходимости):

Control-x: shell-expand-line

Обратите внимание, что вы также можете использовать одно из следующих действий, чтобы расширить только историю, или ваши псевдонимы, или оба:

Control-x: история-расширение-линия

или

Control-x: псевдоним-расширение-строка

или

Control-x: история-и-псевдоним-расширение-линия

Это было взято из этого блога , и этот вопрос о SuperUser , который очень похож:

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.