【问题标题】:Not same result executing in script or in shell [closed]在脚本或shell中执行的结果不同[关闭]
【发布时间】:2022-01-27 17:31:48
【问题描述】:

我正在使用以下命令删除文件中的一行,该行部分在脚本中工作,但完全在 shell 中。

cat "$folderDb.list" | sed "/^$elementToDeleteKey /d" > "$folderDb.list-d"

$elementToDeleteKey 后面的空格是必须的,因为文件的结构如下:

KEY_WITHOUT_SPACES INFO1 INFO2 INFO3...

当键是文件(其中空格被下划线替换)时,在我的脚本中执行的这段代码会删除该行,但当它是文件夹时则不会(这里的替换相同)。我知道这无关紧要,因为在这种情况下,它们都被视为字符串。

在 shell 中手动执行的这段代码输出了我想要的结果:该行被删除了。

输入文件

/share/homes/test/test1/backup.conf 4 979 Jan 20 15:02:05 2022 /share/homes/test/test1/backup.conf
/share/homes/test/test1/backups.sh 4 843 Feb 19 23:25:02 2019 /share/homes/test/test1/backups.sh
/share/homes/test/test1/test2 8 4096 Jan 26 11:46:21 2022 /share/homes/test/test1/test2
/share/homes/test/test2 8 4096 Jan 26 11:46:21 2022 /share/homes/test/test2
/share/homes/test/test1 8 4096 Jan 27 12:21:20 2022 /share/homes/test/test1
/share/homes/test/test1/test2/backup.conf 4 324 Mar 17 23:06:42 2016 /share/homes/test/test1/test2/backup.conf

elementToDeleteKey

/share/homes/test/test2 /share/homes/test/test1/test2/backup.conf

第一个是文件夹,第二个是文件,但正如我所说,从这个角度来看,它们都是字符串。

elementToDeleteKey 在传递给 sed 之前被反斜杠。所以它给出了:

\/share\/homes\/test\/test2 \/share\/homes\/test\/test1\/test2\/backup\.conf

我很困惑!有人解释一下吗?

【问题讨论】:

  • 我们无法重现这一点。请editminimal reproducible example 提供一个简单的输入文件,该文件可以重现问题,并且所有变量都已完全填充。
  • 今天拯救一只猫。 sed 已经可以打开文件了:sed "/^$elementToDeleteKey /d" "$folderDb.list" > "$folderDb.list-d"
  • @tripleee 我添加了我的测试“.list”文件的内容和变量elementToDeleteKey
  • @knittl 我救了一只猫,但动物没有救我。
  • 请将您的代码从您的脚本复制粘贴到您的 shell 中,或者从您的 shell 中复制粘贴到您的脚本中,看看差异是否仍然存在。 95% 的情况下,问题是 1. 发现在 shell 中工作的东西,2. 在脚本中用循环、变量、文件输入等重写它,3. 发现脚本不起作用,4. 假设问题是因为它在脚本中而不是被重写

标签: linux sh


【解决方案1】:

终于没有找到问题所在,但是我直接修改文件而不是新建文件来解决了。

sed -i "/^$elementToDeleteKey /d" "$folderDb.list"

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2011-11-26
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多