我正在使用 shell 制作一个简单的 shell 脚本tcsh
。我分配了一个变量作为稍后使用的命令。但是单引号内的括号消失了。
set aaa = "test '10' '{}' ' " ; echo $aaa
结果显示
test '10' '' '
为什么会这样?如果我单独使用{}
和''
,没关系。
set aaa = "test '10' {} '' ' " ; echo $aaa
test '10' {} '' '
我正在尝试将 MATLAB 与 SUSE Linux 11 中的 Cadence Virtuoso(一种电气工程软件)链接起来,并且我有手册 PDF 作为这样做的指南。我的问题是手册中给出的命令与 Linux SUSE 不兼容。
有谁知道如何将以下命令转换为 SUSE 兼容命令?
setenv LD_LIBRARY_PATH `cds_root spectre`/tools/dfII/lib:`cds_root spectre`/tools/lib:${LD_LIBRARY_PATH}
setenv MATLABPATH `cds_root spectre`/tools/spectre/matlab:${MATLABPATH}
我正在 tcsh 中编写一个简单的脚本(显然这是一个坏主意,但很好)从文本文件中 grep 一些模式。假设我们有一个文件animal_names.txt
,其中包括:
dog carrot
dog bolt
cat larry
cat brownies
bird parry
bird pirate
我写了脚本:
set animals = "dog\|cat"
set names = `grep $animals animal_names.txt`
echo "$names"
目的是用“狗”或“猫”对所有行进行 grep。但是,我得到的输出只是单行:
dog carrot dog bolt cat larry cat brownies
不知何故,换行符在输出中被删除了。有没有办法保留换行符?另一篇文章建议使用 :q 修饰符,但在我的情况下不起作用。
我有一个名为“random”的文件,如下所示:
A B C D
A B C D
A B C D
如何让这个 shell 脚本打印第二列?
#! /usr/bin/tcsh -f
set variable = "2"
awk '{print "$""'"$variable"'" }' random
它给:
$2
$2
$2
$2
$2
如果我像这样对 $2 进行硬编码:
#! /usr/bin/tcsh -f
awk '{print $2 }' random
我明白了
B
B
B
但是我每次都需要设置不同的值,所以硬编码不是一种选择
我的终端 shell 提示默认为[johnnine@tec ~]$
.
我应该如何在中使用“设置提示” ~/.cshrc
,以便它也显示时间?
我正在修改一套用 tcsh 编写的脚本。不幸的是,这些脚本无法重写,因为它们与之交互的程序也是用 tcsh 编写的。我只是想摆脱这样的想法,即如果我可以用 BASH 或任何其他语言重写这些,我会的。
作为这些脚本的一部分,我们的许多变量都保存在数组中。我的问题是:在 tcsh 中有没有一种方法可以在不使用循环的情况下查询变量的内容是否存在于数组中(无论它在数组中的位置如何)?
例如,我有以下有效 ROI 名称数组:
set shortROI = {"lAmy_","mAmy_","A32p_","A32sg_"}
当用户执行脚本时,他们可以选择使用一个标志来表示他们想要对上述选项中的一个或多个特定ROI 进行重做处理。就像,如果标志是-remake_ROI
,作为调用脚本的一部分,他们只能添加-remake_ROI lAmy
或-remake_ROI lAmy A32p_
重新制作这些 ROI。我有一个非常大的while
循环当前处理所有可能的标志,但此处相关的部分如下所示:
set ac = 1
set redo_rois = 0
set roi_proc_list =
while ( $ac <= $#argv )
foreach roi_opt ( $shortROI )
if ( "$argv[$ac]" == $roi_opt )
@ redo_rois ++
set roi_proc_list = ( $roi_proc_list $roi_opts )
endif
end
@ ac ++
end
ac
是命令行参数计数,redo_rois
是要重新处理的 ROI数量,是roi_proc_list
要重做的实际列表。我想知道是否有类似if ( "$argv[$ac]" == "$shortROI[*]" )
的东西可以完成工作,而不是许多循环。
感谢任何人的帮助。
我正在尝试在 Linux Mint 机器上安装 GAMESS(一个计算化学包),并且配置文件#!/bin/csh
在开头有一个。
当我运行./config
第一行时,export: Command not found.
如果我尝试继续安装过程,我会得到很多其他“找不到命令”行。
我已经安装了csh
,tcsh
这是输出echo $PATH
:
/home/chicolucio/Gabedit64:/home/chicolucio/anaconda3/bin:/home/chicolucio/bin:/home/chicolucio/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
''chicolucio'' 是用户。
我试图将文件的第一行更改为#!/bin/tcsh
(当交互式安装出现问题时,自述文件将其作为一个选项引用)但它不起作用。我还尝试dos2unix
根据我在互联网上阅读的一些链接在文件上运行,但它也没有工作。两次尝试都会产生相同的“找不到命令”问题。
我还能尝试什么?我是 Linux 的新手。
我构造了以下查找命令:
find ./ \( -path "*work*" -o -path "*ncvlog_lib*" \) -prune -o -type f -not
-name "*.wlf" -not -name "*.vcd" -not -name "*.sim" -not -name "*vcs*"
该命令在一行中调用。为了可读性,我在这里打破了界限。
唯一的问题是,尽管提供了 -type f 参数,它仍会打印修剪后的目录名称。样本输出:
./cdl2verilog_files/test_synth/work
./cdl2verilog_files/test_synth/some_file1.txt
./cdl2verilog_files/test_synth/something_else.txt
./cdl2verilog_files/test_synth/another_file.v
work
是一个目录。它的内容不包含在输出中,因此修剪会根据需要进行。但是,目录本身会被打印出来。我似乎无法为此找到解决方案。有什么想法吗?
顺便说一句,我正在使用 tcsh 。