有没有办法可以实现 find 或者 locate 输出的结果可以被后续命令处理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
mylovesaber
V2EX    Linux

有没有办法可以实现 find 或者 locate 输出的结果可以被后续命令处理?

  •  
  •   mylovesaber 2021-12-16 04:16:55 +08:00 3210 次点击
    这是一个创建于 1402 天前的主题,其中的信息可能已经有所发展或是发生改变。

    已知有两个文件:test01 和 test0101

    root@debian ~/test # ls t* test01 test0101 t.sh 

    直接运行 find 命令的话,输出一切正常,但如果将 find 命令的输出结果赋值给一个新的变量,然后最终输出那个变量的话:

    root@debian ~/test # cat t.sh FIXED_PATH=$(find /root -name "*test01*") ${FIXED_PATH} 

    输出就是报错信息:

    root@debian ~/test # bash t.sh t.sh: line 3: /root/test/test0101: Permission denied 

    什么原因导致的呢?有没有办法可以实现 find 或者 locate 输出的结果可以被后续命令处理?

    10 条回复    2021-12-23 20:31:42 +08:00
    ryd994
        1
    ryd994  
       2021-12-16 04:22:06 +08:00 via Android   3
    ${FIXED_PATH} 的效果是执行这个命令
    你需要的是 echo ${FIXED_PATH}
    echo 是输出变量的内容
    ETiV
        2
    ETiV  
       2021-12-16 04:26:06 +08:00
    处理啥?
    find 一般后面接 xargs
    mylovesaber
        3
    mylovesaber  
    OP
       2021-12-16 05:25:32 +08:00
    @ryd994 感谢提醒!看来我得早点睡觉了。。。。脑子浑了。。。
    xiaoz
        4
    xiaoz  
       2021-12-16 08:01:00 +08:00 via Android
    find 不是自带后续处理命令吗用-exec
    echoechoin
        5
    echoechoin  
       2021-12-16 11:54:04 +08:00
    bash -x 可以调试嘛
    Routeros
        6
    Routeros  
       2021-12-16 12:02:49 +08:00
    [root@Aliyun ~]# find /root/ -name "main*"
    /root/main.go
    /root/main
    /root/main.exe
    [root@Aliyun ~]# cat t.sh
    #!/bin/bash
    FIXED_PATH=$(find /root/ -name "main*")
    echo ${FIXED_PATH}
    [root@Aliyun ~]# ./t.sh
    /root/main.go /root/main /root/main.exe
    [root@Aliyun ~]#
    huntagain2008
        7
    huntagain2008  
       2021-12-16 13:24:22 +08:00
    #1
    #5
    感谢上面 2 位的回答。本人非程序员,开始我以为是文件权限问题,可是楼主用的 root,应该无关。然后看了前面的回复我才搞懂了点。

    楼主用的命令替换,用 shell 脚本将命令输出提取信息,并将其赋给变量。
    其中一种将命令输出赋给变量:
    $()格式 testing=$(date)
    shell 会运行命令替换符号中的命令,并将其输出赋给变量 testing 。
    楼主的情况就是 find 查找文件得到‘~/test/test01 ~/test/test0101 ’将其赋给 FIXED_PATH ,这一步是正确的。下一步使用变量 FIXED_PATH,楼主可能认为 find 命令得到的结果是一个数组,于是用了${FIXED_PATH},但我认为这不是数组,数组应该是(~/test/test01 ~/test/test0101)
    > 你可能还见过通过${variable}形式引用的变量。变量名两侧额外的花括号通常用来帮助识别美元符后的变量名。

    第二行${FIXED_PATH}实际就是~/test/test01 ~/test/test0101 我想应该是被解释为尝试执行~/test/test01 发现没有执行权限,如果再
    $ chmod u+x ~/test/test01
    这样给~/test/test01 加上执行权限,那么就不会报错了。
    levinit
        8
    levinit  
       2021-12-16 18:24:29 +08:00 via iPhone
    这不是 find 报错 很明显是执行那行 fixedpath 的问题 你先 echo 下那个 ficedpath ,看看输出啥,
    cattyhouse
        9
    cattyhouse  
       2021-12-17 04:00:38 +08:00 via iPhone
    FIXED_PATH=( $(find /root -name "*test01*") )
    for i in ${FIXED_PATH[@]} ; do
    [[ -x $i ]] && source $i
    done
    mylovesaber
        10
    mylovesaber  
    OP
       2021-12-23 20:31:42 +08:00
    @huntagain2008 谢谢,其实没有这么复杂的,一个 echo 就解决了,其实 find 出来的是一个结果一行,然后通过 for 循环可以数行数的,我最初需要做到的是超过 1 行就报错,也感谢分享其他写法哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1022 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:40 PVG 02:40 LAX 11:40 JFK 14:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86