Questions tagged «shell»

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

2
将带有引号和双引号的参数传递给bash脚本
目前,我有: #!/bin/bash screen -p 'ScreenName' -x eval 'stuff '"'"$@"'"'\015' echo eval 'stuff '"'"$@"'"'\015' 但是当我将脚本称为: # script.sh asd "asd" 'asd' 我的论点传递为:asd asd asd 然后我得到输出: eval stuff 'asd asd asd'\015 我除外:asd“ asd”'asd' 如何更改脚本以将所有引号与所有引号一起传递?
11 bash  shell  quoting 



1
使用glob在for循环中指定“ ./”有什么好处吗?
我的印象是./*.fastq,搜索以结尾的文件时可能更安全.fastq。例如,./将阻止捕获文件.fastq。显然这是错误的,如下例所示: TMP_DIR=$(mktemp --directory) mkdir -p ${TMP_DIR} (cd ${TMP_DIR} touch {a,b,c,}.fastq ls -a echo "" echo "# match all:" for f in *.fastq ; do echo "${f}" done echo "" echo "# with ./:" for f in ./*.fastq ; do echo "${f}" done ) rm -rf ${TMP_DIR} . .. a.fastq b.fastq …
10 bash  shell  wildcards 

2
您能在这段bash代码中为我解释这三件事吗?
我有一个function在我的.bashrc文件。我知道它的作用,它可以增加X个目录cd 这里是: up() { local d="" limit=$1 for ((i=1 ; i <= limit ; i++)) do d=$d/.. done d=$(echo $d | sed 's/^\///') if [ -z "$d" ]; then d=.. fi cd $d } 但是您能为我解释这三件事吗? d=$d/.. sed 's/^\///' d=.. 为什么不这样做: up() { limit=$1 for ((i=1 ; i <= limit ; …

2
tr使用范围的奇怪行为
我有一台使用tr时表现出奇怪行为的特定服务器。这是工作服务器上的示例: -bash-3.2$ echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-z] 1234567890 -bash-3.2$ 这对我来说很有意义。 但是,这来自“特殊”服务器: [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-z] abcdefghijklmnpqrstuvwxyz1234567890 如您所见,删除所有小写字符失败。但是,它已删除字母“ o” 有趣的部分是以下两个示例,这些示例对我来说毫无意义: [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-n] opqrstuvwxyz1234567890 [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-o] abcdefghijklmnpqrstuvwxyz1234567890 [root@host~]# (同样,在上一个示例中删除了“ o”) 有人知道这里发生了什么吗?我无法在正在使用的任何其他Linux盒上进行复制。


5
方括号内的大小写敏感
通常,bash globe区分大小写: $ echo c* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py $ echo C* CarePackage.md ChocRippleCake.md Clips 使用方括号似乎并没有改变: $ echo [c]* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py $ echo [C]* CarePackage.md ChocRippleCake.md Clips 如果使用连字符,它仍然不会更改: $ echo [c-c]* casefix.pike cdless chalices.py charconv.py chocolate.pike …
10 bash  shell  wildcards  locale 


2
分配类似于具有退出状态的命令,除了何时有命令替换?
请参阅以下示例及其在POSIX Shell中的输出: false;echo $?或false || echo 1:1 false;foo="bar";echo $?或foo="bar" && echo 0:0 foo=$(false);echo $?或foo=$(false) || echo 1:1 foo=$(true);echo $?或foo=$(true) && echo 0:0 正如在/programming/6834487/what-is-the-variable-in-shell-scripting中投票最高的答案所提到的: $? 用于查找最后执行的命令的返回值。 在这种情况下,这可能有点误导,因此让我们获取POSIX定义,该定义也在该线程的帖子中被引用: ?扩展到最新管道的小数退出状态(请参见管道)。 因此,它仿佛是一次分配本身算作一个命令(或者说管道部分)以零退出值,但其应用之前分配的右侧(例如,在我的例子命令替换调用这里)。 我从实际的角度看这种行为是有道理的,但对我而言,分配本身按该顺序进行计数似乎有点不寻常。也许要弄清楚为什么对我来说很奇怪,让我们假设赋值是一个函数: ASSIGNMENT( VARIABLE, VALUE ) 那foo="bar"会是 ASSIGNMENT( "foo", "bar" ) 并且foo=$(false)会像 ASSIGNMENT( "foo", EXECUTE( "false" ) ) 这意味着先EXECUTE运行,然后才运行,但这仍然是重要的状态。 ASSIGNMENTEXECUTE 我的评估是否正确,或者我误会/遗漏了什么?这些是我将这种行为视为“奇怪”的正确原因吗?



2
为什么while循环在被暂停后会停止?
为什么使用bash并暂停while循环,然后在恢复循环后停止循环?下面的简短示例。 $ while true; do echo .; sleep 1; done . . ^Z [1]+ Stopped sleep 1 $ fg sleep 1 $ 我熟悉信号,我猜这可能是bash的自然行为,但我想更好地理解为什么它会以这种特定方式运行。

4
为什么我的程序“ set”没有执行?
我创建了一个简单的C程序,如下所示: int main(int argc, char *argv[]) { if (argc != 5) { fputs("Not enough arguments!\n", stderr); exit(EXIT_FAILURE); } 我在etc / bash.bashrc中修改了我的PATH,如下所示: PATH=.:$PATH 我已经将该程序保存为set.c,并使用 gcc -o set set.c 在文件夹中 ~/Programming/so 但是,当我打电话 set 2 3 什么都没发生。没有文字出现。 呼唤 ./set 2 3 给出预期的结果 我以前从未遇到过PATH问题 which set 返回./set。因此,似乎PATH是正确的路径。发生什么事了?

2
用其协同进程/子进程替换当前进程
我有一个程序P,期望接收“你好”并输出“为什么?” 在提供功能之前。其他不知道通常与“ Hello”开始对话的程序使用此功能。因此,我想为此编写一个包装器P(zsh语法): coproc P print -p Hello # Send Hello to P read -pr line # Read what P has to say [[ "$line" = "Why?" ]] && Replace current process with the coprocess. echo Could not get P's attention. 在部分中使用cat或会导致不必要的缓冲。我有什么选择?ddReplace...cat <&p &; exec cat >&p
10 shell  scripting  process  zsh 

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.