有时我在csh中对不同的目标文件使用相同的foreach操作。
如果我可以在一行中给予foreach命令,我可以很容易地替换目标文件名来重复这个过程。(我通常使用find . -name.
作为目标文件)
对于这个问题的目的,让我们假设我想猫所有的 *.txt文件。
$ foreach i (*.txt)
foreach? cat $i
foreach? end
字符串
我读了https://unix.stackexchange.com/questions/32873/running-a-full-foreach-command,
alias disp 'echo "foreach i (*.txt)"; echo "cat "\$"i"; echo "end"; | /bin/csh'
型
当我输入disp
时,它会给我Invalid null command
。
如果我可以在一行中完成,我可以做!foreach:gs/\.c\>/.h/
(用.h替换.c)。我怎么做呢?
6条答案
按热度按时间e0bqpujr1#
这个方法对我很有效:
字符串
xesrikrc2#
在tcsh下,没有简单的方法在一行中完成foreach。
然而,通过使用别名,你可能会得到一些非常接近你的问题。
字符串
您可以在终端中调用
disp
。如果你想把结果导入管道,那么
echo
disp| grep foobar
。有时,我们需要先保存结果,然后再进一步处理:
set foo=
disp``hpxqektj3#
使用bash -c:
$ bash -c 'for i in *.txt; do cat $i; done'
nsc4cvqm4#
别名可以作为解决方法,但可能是痛苦的和有限的。更喜欢创建一个脚本或FIFO文件。这里有一个文件的例子。
字符串
这里有一个FIFO的例子。
型
o2gm4chl5#
对于你的第一个问题,我不知道如何直接将其写入.cshrc文件。
但我会用另一种灵活的方式来做到这一点。
1:编写一个shell脚本:/home/user/disp.sh(或者任何你想要的路径)
字符串
或者你只有csh shell:
型
1.将新别名命令添加到
.cshrc
文件alias disp /home/user/disp.sh
个1.重新输入csh shell(或重新登录)
csh
个对于你的第二个问题,我在同一个disp.sh脚本上做了它
型
您可以简单地键入
disp -d 1 -e c
来查找当前路径中的所有.c文件。(-d表示从当前路径开始的文件的深度,-e表示文件的扩展名)ghg1uchk6#
我试图找到答案,但看起来没有办法。只是通过简单地改变shell使用bash。
% bash
$ for f in *txt; do echo $f; done
$ exit
%