我在 Linux 和 C-shell 中工作。很多时候,我需要更改提示中已有内容的某些部分,这些内容是我通过使用CTRL+R. 我不想用Backspace来做这件事。我在 superuser.com 上看过这个问题,它专门针对 bash。这个答案说使用CTRL+Uwhich 会清除当前光标位置之前的所有内容。但这为我清除了所有内容,即使我按下了几个退格键,现在位于提示文本的中间。在 Linux 中是否有特定的 C-shell 实现方式?
我不确定如何使用csh字符串匹配语法来表达这一点。我想测试一个 csh 变量是否包含换行符。我基本上在寻找:
if ($mystr !~ <pattern for strings which contain a newline character>)
Run Code Online (Sandbox Code Playgroud)
编辑:在我的特殊情况下,我正在尝试制作这样的字符串:
1234ABC
Run Code Online (Sandbox Code Playgroud)
像这样的字符串失败:
1234ABC
-------
FOOBAR
Run Code Online (Sandbox Code Playgroud)
这些是sed命令的输出,即sed '1d;$d'. 不确定这是否重要。
我试图检测换行符而不是" -------"为了防止我正在解析的文件格式发生变化的原因。(无论如何,我认为我对文件所做的事情并不重要,因为我只是在寻找检测换行符的通用解决方案。)
我尝试了删除大括号之间的文本时给出的代码
但是我正面临着关于 sed 事件的这个不同的错误。
文件包含:
This is {
{the multiline
text} file }
that wants
{ to {be
changed}
} anyway.
Run Code Online (Sandbox Code Playgroud)
sed ':again;$!N;$!b again; s/{[^}]*}//g' file
锻炼中可能出了什么问题?
错误
N: Event not found.
Run Code Online (Sandbox Code Playgroud) 来自 Unix Power Tools 第 3 版第 175 页:
第 9.27 节展示了一种匹配路径中间目录的方法。这是一个更简单的“查找文件”别名,可以派上用场:
alias ff "find . -name '*\!{*}*' -ls"给它一个文件或目录名;别名将给出包含参数的任何文件或目录名称的长列表。
(这也可以在线获得。)
我根本没有得到-name操作员的论据。这是笔误吗?它仅适用于特定版本find吗?反斜杠、bang 和花括号的作用是什么?
bash: settings64.csh: line 35: syntax error near unexpected token `('
bash: settings64.csh: line 35: `foreach i ( $xlnxInstLocList )'
Run Code Online (Sandbox Code Playgroud)
set xlnxInstLocList="${xlnxInstLocList} common"
set xlnxInstLocList="${xlnxInstLocList} EDK"
set xlnxInstLocList="${xlnxInstLocList} PlanAhead"
set xlnxInstLocList="${xlnxInstLocList} ISE"
set XIL_SCRIPT_LOC_TMP_UNI=${XIL_SCRIPT_LOC}
foreach i ( $xlnxInstLocList )
Run Code Online (Sandbox Code Playgroud)
line 35
foreach i ( $xlnxInstLocList )
Run Code Online (Sandbox Code Playgroud)
我不是脚本家;我正在尝试修复 ISE DESIGN SUITE 安装的脚本错误。我只需要一组快速代码来替换“foreach i ( $xlnxInstLocList )”以执行其预期功能。我认为这是一个 Bash 脚本。
我正在运行最新的 OpenBSD,但我无法弄清楚如何设置一个简单的别名,类似于 cls=clear 的东西。我试过把它放在 ~/.cshrc 和 ~/.profile 中。我试过了:
alias cls clear
alias cls=clear
alias cls='clear'
alias cls="clear"
Run Code Online (Sandbox Code Playgroud)
什么都行不通。
在另一个但可能相关的注释中:如果 echo $SHELL 告诉我我正在使用 /bin/ksh,为什么使用 ~/.cshrc 而不是 ~/.kshrc?
我没有任何编写 .sh 文件的经验。我想从Volume Library运行这个应用程序的 pvm2raw 实用程序。
在 Ubuntu 10.10 中运行 build.sh 时出现以下错误。

build.sh 如下:
# make command
set mmfile=V3Makefile
set make="make -f $mmfile"
set rule=$1
if ($rule == "") set rule="all" // line 16
if ($rule == "deps") then
if ($HOSTTYPE == "iris4d") $make MAKEDEPEND="CC -M" OPTS="-DHAVE_CONFIG_H -DVIEWER_HAVE_DCMTK" TARGET=IRIX depend
if ($HOSTTYPE == "i386") $make MAKEDEPEND="c++ -M -I/usr/X11R6/include" OPTS="-DHAVE_CONFIG_H -DVIEWER_HAVE_DCMTK" TARGET=LINUX depend
Run Code Online (Sandbox Code Playgroud)
有什么问题吗?
编辑:我按照 jw013 的建议安装了 csh。现在我收到以下错误:

我该如何解决这个未定义的变量问题?
我正在查看具有以下行的 cron 文件:
35 0 * * * /bin/csh -c "/home/abc/.cshrc;/home/abc/appTools/bin/xxx.pl >>& /home/abc/appTools/log/xxx.cronlog"
Run Code Online (Sandbox Code Playgroud)
这是重定向 STDOUT 和 STDERR 的另一种形式,例如 2>&1 吗?>>&和2>&1之间有什么区别吗?此命令似乎有效,除非 xxx.cronlog 尚不存在。
在 crontab 中,我如何知道它使用的是哪个 shell?
例如,如果我想重定向输出,我怎么知道我是否需要使用 &> 或 >&(bash vs csh)
我正在尝试使用此脚本:
#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
echo $SUB
foreach VISIT (1 2 3 4 5 6 7 8)
echo $VISIT
grep 'StudyDate' -f /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VIS}/scout/001/infodump.dat
done
done
Run Code Online (Sandbox Code Playgroud)
但每次我收到此错误消息时:
1
1
SUB: Undefined variable.
Run Code Online (Sandbox Code Playgroud)
我不知道为什么。