AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 716886
Accepted
telometto
telometto
Asked: 2022-09-12 00:58:54 +0800 CST2022-09-12 00:58:54 +0800 CST 2022-09-12 00:58:54 +0800 CST

是否可以在 bash 中重复尚未执行的字符串的一部分?

  • 772

我想知道是否可以在同一行(即链接)上重复部分命令(尚未执行)。

假设我想执行这个命令

mkdir -p /some/long/dest/path && rsync -azP /some/long/src/path /some/long/dest/path 

是否可以只输入类似于

mkdir -p /some/long/dest/path && rsync -azP /some/long/src/path /path/at/x:2

显然,x:2是最后执行的命令数组中的索引,所以我想知道是否有可能将字符串链接在一起并x在当前字符串的位置重新使用命令。

bash command-line
  • 2 2 个回答
  • 38 Views

2 个回答

  • Voted
  1. Best Answer
    roaima
    2022-09-12T01:06:54+08:002022-09-12T01:06:54+08:00

    您可以使用行编辑功能来获取mkdir参数并将其粘贴到行尾。(我使用vi- 样式的行编辑,因此非常简单: ESC 进入编辑模式,0WW跳转到mkdir路径,yW拉出路径,然后p粘贴它。我假设默认emacs- 样式的行编辑中有一个等价物。 )

    或者,

    p=/some/long/dest/path; mkdir -p "$p" && rsync -azP /some/long/src/path/ "$p"
    

    或者,由于这是一个交互式会话,请通过检查mkdir查看结果:

    mkdir -p /some/long/dest/path
    rsync -azP /some/long/src/path/ !$
    

    如果您以前没有遇到过,它是最后一个命令的!$最后一个参数 ( ) 的替换。$它在man bash(除其他外)。试试这个,看看它是如何进行的:

    date --date tomorrow
    echo !$
    date --date !$
    

    项目从零开始引用,依此echo !!:0类推。

    我知道无法使用此类-style 运算符在当前命令行中引用参数。history

    • 2
  2. G-Man Says 'Reinstate Monica'
    2022-09-20T13:21:31+08:002022-09-20T13:21:31+08:00

    我已经足够大,可以记住硬拷贝终端 (对你们孩子来说,想象一台带键盘的打印机),我相信这种编辑器风格的命令行编辑是一种不会持续太久的时尚。    :-)

    但是,说真的,我发现我不是唯一一个听说过!-style 命令历史的人。它在bash(1)中有一些详细的讨论 ;见 历史部分。这是一个简短的摘要(即,一个示例列表,其中包含一些关于通用形式的提示):

    语法/
         示例
    解释/评论
    !number;!42 自您登录以来的第 42 条命令。或者更确切地说, history列表中的第 42 条命令;如果有删除或截断,这会变得复杂。
    !-number; !-1,     !-2,!-42 相对寻址。  !-1是最近的命令;!-2是之前的命令,等等  -1是默认的,!-1可以缩写!!并且 (见下文)可以缩写。!-1:something!:something
    thing1:thing2 thing1由 修改。一个事物可以有多个修饰符。请参阅下面的示例。thing2
    :number 第n个单词。正如 roaima 所说,单词编号从 0 开始,所以,如果前面的命令是ls -l foo,那么
    • !:0= ls,
    • !:1= -l, 和
    • !:2= foo。
    :$ 最后一个字。如 roaima 所示,无需解释,:$可以缩写$。
    :h 头; 一样dirname。
    :t 尾巴; 一样basename。

    一个似乎不太为人所知的结构是 !#引用当前 命令。  所以,你的

    mkdir -p /some/long/dest/path  &&  rsync -azP /some/long/src/path /some/long/dest/path
    

    命令可以输入为

    mkdir -p /some/long/dest/path  &&  rsync -azP /some/long/src/path !#:2
    

    where让你从这个命令中!#:2得到第二个单词 ( /some/long/dest/path) 。

    而且,如果rsync论点真的几乎是相邻的,正如你的例子所暗示的,你可以走得更远,说

    mkdir -p /some/long/dest/path  &&  rsync -azP !#:2:h:h/src/path !#:2
    

    where!#:2:h:h是具有多个修饰符的事物的示例 - dirname(dirname(!#:2))= /some/long。我们甚至可以更进一步:

    mkdir -p /some/long/dest/path  &&  rsync -azP !#:2:h:h/src/!#:2:t !#:2
    

    但是,如果basename(!:2)是真的,字面意思是“ path”,那么这实际上是更多的打字。

    • 1

相关问题

  • 没有服务器的命令行 pub/sub?

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve