2

Иногда я забываю свои относительные пути и к тому времени, когда я отслеживаю, где находится файл, я набрал:

Cris-Mac-Book-2:weird cris$ ls ../../../
Icon?       Research    Support
Cris-Mac-Book-2:weird cris$ ls ../../../Support
Fourganizical       PicoCryptical       SupportPlan.txt
MoneyProjectical    Qwontical       Testcomms
OSICAL          StanTechStatistical todo
Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical
S   cs  mini    php py  readme
Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical/py/StanTechPico.py

Чтобы запустить этот скрипт, я нажимаю ←, пока не вернусь к началу команды, а затем заменил python на ls .

Когда я делаю это длительное удержание (что, кажется, часто), я всегда думаю, что должен быть более быстрый способ отредактировать командную строку или выполнить вывод предыдущей команды.

Таким образом, на самом деле не квалифицируясь как суперпользователь bash, я попытался перенаправить вывод ls в python, который не работал должным образом:

Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical/py/StanTechPico.py | python
  File "<stdin>", line 1
    ../../../Support/PicoCryptical/py/StanTechPico.py
    ^
SyntaxError: invalid syntax
Cris-Mac-Book-2:weird cris$

Итак, мой вопрос: как поместить вывод STDOUT предыдущей команды в положение аргумента новой команды?

6 ответов6

6

^ls^python выполнит вашу непосредственную потребность (повторите предыдущую команду, заменив python вместо ls)

6

Я не уверен, что вы на самом деле спрашиваете

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

Я думаю, что вам может пригодиться использование $_

$ ls /tmp/long/path/which/contains/file
/tmp/long/path/which/contains/file
$ python $_

$_ Заменяется последним аргументом предыдущей команды, которую вы выполнили.

См. Http://tldp.org/LDP/abs/html/internalvariables.html.

Тем не менее, если вы действительно хотите использовать стандартный вывод в качестве аргумента для другой команды, вы можете использовать xargs для этого (см http://linux.die.net/man/1/xargs)

$ ls /tmp/long/path/which/contains/file | xargs python
4

Вы когда-нибудь использовали спины?

python `ls ../../../somefile`

Вызвать python с выводом ls качестве аргумента.

Не совсем уверен, что это то, о чем вы спрашиваете.

3

Вы можете напечатать

python

и нажмите ALT + .

Нажмите ALT + . вставляет последний аргумент последней команды. Повторное нажатие на ярлык идет дальше назад.

РЕДАКТИРОВАТЬ: я проверил это на разных Linux и OpenBSD, используя bash, sh, ksh, dash, zsh. Это не швы работают в (т) CSH. Что меня удивляет, потому что я думал, что это особенность readline?!

2

Помимо ответа Эндрю, неплохо бы знать, что Ctrl+a перемещает курсор в начало строки.

2

Ваша непосредственная потребность, кажется, решена, но вот некоторые решения для вашей долгосрочной потребности в поиске « более быстрого способа редактирования командной строки ».

Из вашего примера похоже, что у вас уже есть завершение bash (http://www.hypexr.org/bash_tutorial.php#completion) в вашей системе, поэтому вы должны быть в состоянии сделать то же самое с Tab, просто запустите команда с python вместо ls затем Tab .

Вот некоторые из основных ярлыков, которые я постоянно использую (большинство работает на любой системе * nix, но некоторые ... особенно OS X ... иногда могут капризничать).

  • Ctrl + или Ctrl + переходят по словам вместо отдельных символов.
  • Ctrl + A - переход к началу командной строки
  • Ctrl + E переходит в конец командной строки
  • !! будет повторять последнюю команду в истории (и распечатывать, что это была за команда)

    $ ls
    file1
    file2
    $ !!
    ls
    file1
    file2

  • !$ напечатает самый последний аргумент из вашей предыдущей команды (упомянутый выше $_ , который относится к bash, в основном эквивалентен ... там, я сделал это, пусть начнутся дебаты)

    $ ls ../file.py
    file.py
    $ python !$
    python ../file.py
    script output ...

Еще несколько отличных примеров смотрите в разделе "Сочетания клавиш" в Справочнике по командам терминала Linux. Хотя эта страница относится к Linux Mint, единственная система * nix, которую я нахожу недовольной этими ярлыками, - это OS X.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .