相关疑难解决方法(0)

shell 的控制和重定向操作符是什么?

我经常在网上看到用不同符号连接各种命令的教程。例如:

command1 |  command2
command1 &  command2
command1 || command2    
command1 && command2
Run Code Online (Sandbox Code Playgroud)

其他人似乎将命令连接到文件:

command1  > file1
command1  >> file1
Run Code Online (Sandbox Code Playgroud)

这些是什么?他们叫什么?他们在做什么?还有更多吗?


关于这个问题的元线程。.

shell io-redirection control-flow

353
推荐指数
3
解决办法
17万
查看次数

zsh 中有哪些功能而 bash 中缺少哪些功能,反之亦然?

作为 Linux 用户,我一直只使用 bash,因为它是我使用的每个发行版的默认设置。使用其他 Unix 系统(如 BSD)的人似乎更频繁地使用其他 shell。为了多学习一点,我决定尝试一下 zsh。

作为 bash 用户:

  • 我会错过哪些功能?
  • 我应该注意哪些?

bash zsh

63
推荐指数
4
解决办法
9392
查看次数

如何在 Korn Shell 中获取 subshel​​l 的 PID(相当于 $BASHPID)

在 bash 中,你有这个方便的变量: $BASHPID ,它总是返回当前运行的子 shell 的 PID。如何在 ksh 中获取子 shell 的 PID?例如看下面的代码:

#!/usr/bin/ksh93

echo "PID at start: $$"

function run_in_background {
  echo "PID in run_in_background $$"
  run_something &
  echo "PID of backgrounded run_something: $!"
}

function run_something {
  echo "*** PID in run_something: $$"
  sleep 10;
}    

run_in_background
echo "PID of run in background $!"
Run Code Online (Sandbox Code Playgroud)

这将输出以下内容:

PID at start: 5328
PID in run_in_background 5328
*** PID in run_something: 5328
PID of backgrounded run_something: 5329
PID of run in background …
Run Code Online (Sandbox Code Playgroud)

shell ksh shell-script subshell

8
推荐指数
1
解决办法
1万
查看次数

使用文件中的参数(文件名)多次运行命令?

我有一个包含一长串文件名(带有完整路径)的文件。我还有一个我想多次运行的程序,使用此列表中的一个和一个文件名作为参数。我想运行的程序很遗憾是一个自制的脚本;所以它一次只能取一个文件名,并且它不能接受来自stdin 的输入(如文件名列表)——所以不可能进行管道或输入重定向。

我需要的是一个命令,它将运行另一个命令(我的脚本),使用文件中的行作为参数。

喜欢的东西find-exec-action ...( find . -name "*.txt" -exec command \;)。我想我实际上可以find在这里使用,但我希望对输入文件进行排序......

所以我需要的是这样的:

for_each_command1 -f list_of files -c './my_command {}'
for_each_command2 -f list_of_files -exec ./my_command {} \;
for_each_command3 -c './my_command {}' 

我处理此类任务的常用方法是sed- 不幸的是,有很多开销而且它并不漂亮(但它确实有效......):

$ wc -l list_of_files 232 $ for (( i=1; 我愿意 > ./my_command "`sed -n "${i}p" list_of_files`" > 完成

那么是否有内置的命令或 shell 来处理这样的事情?

command-line bash shell-script

4
推荐指数
2
解决办法
7033
查看次数

将ksh脚本目录转换为bash脚本的脚本?

由于这两个kshbash是基于sh很多的Korn Shell脚本(KSH)将简称为伯恩-再次Shell脚本(bash)的一次家当和文件扩展名被改变运行,

而你调用$ bash script.bash而不是$ ksh script.ksh.

我有一个基本脚本来替换名为“files”的目录中出现的任何 ksh 并更改脚本的文件扩展名。

#!/bin/bash/

#replace instances
find ./files -type f - exec sed -i.bak "s/ksh/bash/g" {} \;

#Change extensions
for f in ./files/*.ksh;
  do mv "$f" "./files/""$(basename "$f" .ksh).bash"
done

#Clean up
rm ./files/*.bak
Run Code Online (Sandbox Code Playgroud)

该脚本可以工作并执行上述操作,但是是否足以将任何 ksh 脚本转换为 bash,或者是否存在我未考虑的条件?

bash ksh shell-script conversion

0
推荐指数
1
解决办法
7170
查看次数