Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sed未正确地将标准输出传递给ls_Bash_Ssh_Sed_Ls_Xargs - Fatal编程技术网

Bash sed未正确地将标准输出传递给ls

Bash sed未正确地将标准输出传递给ls,bash,ssh,sed,ls,xargs,Bash,Ssh,Sed,Ls,Xargs,我试图在sed中编辑一个我一直有问题的简单字符串。 基本上,我要做的是使用pwd获取我当前的工作目录,将其传输到sed,编辑文件路径,然后使用ls检查文件路径内容。我需要这样做的原因是动态检查备份,以查看备份是否包含我当前正在使用的文件夹中所需的文件(只是将其转换为快速热键) 以下是到目前为止我得到的信息: pwd | sed "s/`whoami`/`whoami`.{daily,weekly,monthly}/g" | xargs ls 在我的服务器(它是一个共享主机服务器,因此需

我试图在sed中编辑一个我一直有问题的简单字符串。 基本上,我要做的是使用pwd获取我当前的工作目录,将其传输到sed,编辑文件路径,然后使用ls检查文件路径内容。我需要这样做的原因是动态检查备份,以查看备份是否包含我当前正在使用的文件夹中所需的文件(只是将其转换为快速热键)

以下是到目前为止我得到的信息:

    pwd | sed "s/`whoami`/`whoami`.{daily,weekly,monthly}/g" | xargs ls
在我的服务器(它是一个共享主机服务器,因此需要
whoami
而不仅仅是用户名)上运行时,我会遇到以下错误:

    /bin/ls: cannot access /home1/username.{daily,weekly,monthly}: No such file or directory
但是,我可以毫无问题地运行此命令:

    ls /home1/username.{daily,weekly,monthly}
我尝试过这个命令大约20种不同的变体(各种sed和xargs标志),但似乎无法使它正常工作。我相信这个错误是由sed如何处理搜索和替换为streams引起的,但是我不知道如何解决这个问题,也不知道到底是什么导致了这个错误

我认为是sed导致了问题,因为该命令有相同的错误:

    ls `pwd | sed "s/$(whoami)/$(whoami).{daily,weekly,monthly}/g"`
    /bin/ls: cannot access /home1/username.{daily,weekly,monthly}: No such file or directory

如果有人能告诉我为什么会发生这种情况,或者sed如何将编辑后的版本正确地传递给ls。我应该能想出一个命令,我只需要知道为什么。谢谢

bash
扩展大括号,因此

ls /home1/username.{daily,weekly,monthly}
实际上是作为

ls /home1/username.daily /home1/username.weekly /home1/username.monthly
名为
/home1/username.{daily、weekly、monthly}
的目录不存在
xargs
将直接传递它接收到的任何内容,绕过
bash
大括号扩展

见此:

echo a{b,c}d
>>> abd acd

echo "a{b,c}d" | xargs echo
>>> a{b,c}d

因此,您的问题不在于
sed
,也不在于
ls
。您需要找到一种手动执行扩展的方法。最简单的方法是使用
eval
(编辑:如Adrian Pronk所示)

{daily,weekly,monthly}
字符串由
bash
解释,但bash没有看到这个字符串:它直接从
sed
传递到
xargs
ls

要给
bash
一个扩展字符串的机会,可以尝试:

eval ls $(pwd | sed "s/`whoami`/`whoami`.{daily,weekly,monthly}/g")

太棒了,我以前没用过eval,但这正是我需要的。非常感谢你。