Questions tagged «shell»

Shell是Unix的命令行界面。您可以交互地在外壳程序中键入命令,也可以编写脚本来自动执行任务。使用此标记可解决适用于/ bin / sh和大多数兼容shell(ash,bash,ksh,zsh等)的问题。对于有错误的Shell脚本,请在此处发布之前在http://shellcheck.net中对其进行检查。

15
您已经对外壳配置文件进行了哪些自定义以提高生产率?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我知道有些人有一些启动脚本,有些人则对提示进行个性化设置。一名开发人员将短别名用于他经常访问的长途路径和他经常运行的命令。 您在UNIX概要文件上进行了哪些有效的自定义操作,以提高生产率和易用性?

2
如何在包含“”的字符串中插入变量?
我想通过插入变量来构造一个xml字符串: str1="Hello" str2="world" xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>' echo $xml 结果应该是 <?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2> 但是我得到的是: <?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2> 我也试过 xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>" 但这会删除内部的双引号,并给出: <?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
25 bash  shell  variable  xml 

2
'echo'和'echo -e'之间的区别
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 4年前关闭。 echo和之间有什么区别echo -e?echo命令应使用哪些引号(“”或“”)?即:echo "Print statement"或echo 'Print statement'?另外,可以与哪些选项一起使用echo?
25 shell 

2
带管道的进给源命令
以前我使用过这样的source命令: source file_name 但是我想做的是这样的: echo something | source 这不起作用。
25 shell  pipe 


1
交互式外壳是什么意思?
UNIX:Kenneth H. Rosen等人的《完整参考》第二版。 您可以在登录后通过使用外壳名称作为命令来启动另一个外壳。例如,要启动Korn Shell,可以在命令提示符下键入ksh。这种类型的外壳不是登录外壳,您不必再次登录即可使用它,但它仍然是交互式外壳,这意味着您可以通过键入命令来与外壳进行交互(而不是使用外壳来运行脚本,如第20章中所述。使用图形界面时在终端窗口中运行的Shell实例也是交互式非登录Shell。启动非登录外壳程序时,它不会读取您的.profile,.bash_profile或.login文件(或您的.logout文件),但仍会读取第二个外壳程序配置文件(例如.bashrc)。这意味着您可以测试对的更改。 我正在浏览上述内容,但我不明白交互式外壳的含义。如果使用终端机,不会读取.profile吗? 而且,当您说bourne不是交互式shell而bash / csh是交互式shell时,这意味着什么?
25 shell 





5
为什么Shell Command Substitution吞噬了尾随的换行符?
按照下面的示例,以及我最近 在bash中的问题,结尾的换行符char哪里去了?,我想知道它为什么发生 x="$(echo -ne "a\nb\n")" ; echo -n "$x" | xxd -p # Output is: 610a62 # The trailing newline from the 'echo' command # has been "deleted" by Command Substitution 我认为必须有一个非常重要的理由来执行shell动作,即Command Substitution,实际上从它正在替换的命令输出中删除一些数据... 但是我无法理解这一点,因为它似乎是它应该做什么的对立面..即 将命令的输出传递回脚本过程...对我来说,隐瞒一个字符似乎很奇怪,但是我想这是有道理的...我很想找出那个原因。 。

2
如何重置外壳环境?
这个问题困扰了我一段时间,尽管我认为我已经通过EnvWatcher找到了答案,但不幸的是,它仅适用于Bash。我用zsh。 我想在较小程度上复制env-watcher的功能,但是我需要知道是否有命令可以将shell重置为干净的启动阶段。 例如,我想要以下工作流程。 source some-functions alias another-thing export SVN_EDITOR=vim RESET-ZSH # none of the above are valid any more 有这种内在的可能性,还是我在追蝴蝶?

3
bash是否支持类似于C的fork()的分支?
我有一个脚本,我想一次分叉,以便同一脚本的两个副本正在运行。 例如,我希望存在以下bash脚本: echo $$ do_fork() echo $$ 如果此bash脚本确实存在,则预期输出为: <ProcessA PID> <ProcessB PID> <ProcessA PID> 要么 <ProcessA PID> <ProcessA PID> <ProcessB PID> 我可以代替“ do_fork()”来获得这种输出,还是使bash脚本执行类似于C的fork?
25 shell  fork 

2
如何捕获有序的STDOUT / STDERR并添加时间戳/前缀?
我已经探索了几乎所有 可用的 类似 问题,但均无济于事。 让我详细描述问题: 我运行一些无人值守的脚本,这些脚本可以产生标准输出和标准错误行,我想捕获它们 按终端仿真器显示的精确顺序,然后向它们添加诸如“ STDERR:”和“ STDOUT:”的前缀。 我尝试对它们使用管道,甚至基于epoll的方法,都无济于事。我认为解决方案是使用pty,尽管我对此并不熟练。我也偷看了Gnome VTE的源代码,但是效率不高。 理想情况下,我会使用Go而不是Bash来完成此操作,但我一直无法做到。似乎管道由于缓冲会自动禁止保持正确的行顺序。 有人能够做类似的事情吗?还是不可能?我认为,如果终端仿真器可以做到这一点,那不是-可能是通过创建一个以不同方式处理PTY的小型C程序吗? 理想情况下,我将使用异步输入读取这两个流(STDOUT和STDERR),然后根据需要重新打印它们,但是输入顺序至关重要! 注意:我知道stderred,但是它不适用于Bash脚本,并且不能轻易地添加前缀(因为它基本上包装了许多syscall)。 更新:添加以下两个要点 生成混合stdout / stderr的示例程序 上面程序的预期输出 (可以在我提供的示例脚本中添加亚秒级随机延迟以证明结果一致) 更新:正如@Gilles指出的那样,该问题的解决方案也将解决其他问题。但是我得出的结论是,不可能在这里和那里做所要求的事情。当使用2>&1这两种流时,应该在pty / pipe级别正确合并,但是要分别并以正确的顺序使用流,实际上应该使用stderred的方法,即involes syscall挂钩,并且在许多方面都可以视为脏污。 如果有人可以反驳以上内容,我将急于更新此问题。

3
如何检测我是否在子外壳中?
我正在尝试编写一个函数来替换exit内置函数,以防止自己退出终端。 我试图使用SHLVL环境变量,但是在子外壳中似乎没有改变: $ echo $SHLVL 1 $ ( echo $SHLVL ) 1 $ bash -c 'echo $SHLVL' 2 我的功能如下: exit () { if [[ $SHLVL -eq 1 ]]; then printf '%s\n' "Nice try!" >&2 else command exit fi } 但是,这不允许我exit在子shell中使用: $ exit Nice try! $ (exit) Nice try! 有什么好的方法可以检测我是否在子外壳中?
24 bash  shell  exit  subshell 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.