从这篇文章:
Sourcing 将执行当前 shell 中的命令,执行将创建一个新的 shell 并在那里执行命令。
他描述每个 shell 都有自己的 PID。我看不出 shell 和 process 之间有什么区别,至少在他的上下文中如何使用 shell 这个词没有区别。
在 中bash,假设我想链接目录中的一些但不是所有文件,例如,
ln -s /dir/file1 /dir/file2 ... /other/dir
Run Code Online (Sandbox Code Playgroud)
但是文件名的格式不遵循一些简单的规则,所以我们不能使用类似
ln -s /dir/file* /target/dir.
Run Code Online (Sandbox Code Playgroud)
无论如何不要重复/dir,例如:
/dir/{file1 file2 ...} = /dir/file1 /dir/file2 ...
Run Code Online (Sandbox Code Playgroud)
所以我们可以做这样的事情:
ln -s /dir/{file1 file2 ...} /target/dir
Run Code Online (Sandbox Code Playgroud) expr 实用程序计算表达式并将结果写入标准输出。
评估表达式并打印结果的规范 ZSH 方法是什么?
解决方案:
我相信答案是使用 eval:
例如:
% eval 'export FOO=baz'
% echo $FOO
baz
Run Code Online (Sandbox Code Playgroud)
我还发现了一个类似的超级用户问题“zsh 运行存储在变量中的命令?”
我偶尔需要运行一个命令,例如:
mv "very-long-file-name.x" "very-long-file-name.y"
Run Code Online (Sandbox Code Playgroud)
我想在不重复两次很长的文件名的情况下实现这一点......
我知道如何通过将“非常长的文件名”一次传递给一个 bash 脚本,然后该脚本将使用 $1 来做到这一点......但是我怎么能在没有脚本的情况下做到这一点?
1x cpu 内核对于 SMB 文件共享 Ubuntu 盒是不够的。
我们如何在午夜关闭虚拟机,增加 CPU 内核 1->2,然后打开那个盒子(脚本方式)?
(它是一个 Windows 主机......但也欢迎 Linux 示例 :)
截图在这里 - > http://dwaves.de/index.php/2014/09/22/virtualbox-box-management/
在命令行中,我可以比较两个命令的输出
$ diff <(cmd1) <(cmd2)
Run Code Online (Sandbox Code Playgroud)
但如果我把它放在一个 shell 脚本中
$ sh do_two_comands_diff.sh
Run Code Online (Sandbox Code Playgroud)
这是行不通的
$ diff <(ls) <(ls -a)
0a1,2
> .
> ..
$ cat > test_diff.sh
diff <(ls) <(ls -a)
^D
$ sh test_diff.sh
test_diff.sh:1: test_diff.sh: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)
我尝试使用 $() 代替 () ,但没有成功。我知道在 shell 内部有时需要以与在控制台中不同的方式来完成,但在这里我没有任何线索。有人可以这么好心地将我指向正确的链接,以了解如何在 shell 中正确执行这些操作,以及为什么会发生这种情况?
P。
我刚刚在我的 VPS 上为我的兄弟设置了一个 Minecraft 服务器,并使用 bash 脚本运行它:
sh ./server.sh&
这样,服务器正在运行,我仍然可以使用腻子在同一命令行上工作。但是如果我想向 Minecraft 服务器输入命令怎么办?我如何在控制台屏幕上恢复它:
[10:17:23] [Server thread/INFO]: Starting minecraft server version 1.7.10
[10:17:23] [Server thread/INFO]: Loading properties
[10:17:23] [Server thread/INFO]: Default game type: SURVIVAL
[10:17:23] [Server thread/INFO]: Generating keypair
[10:17:24] [Server thread/INFO]: Starting Minecraft server on *:25565
[10:17:24] [Server thread/INFO]: Preparing level "world"
[10:17:24] [Server thread/INFO]: Preparing start region for level 0
[10:17:25] [Server thread/INFO]: Preparing spawn area: 52%
[10:17:26] [Server thread/INFO]: Preparing spawn area: 99%
[10:17:26] [Server thread/INFO]: Done (2.132s)! For …
我尝试过rse将标准输出和标准错误流与程序区分开来;但我真的很喜欢在单独的终端中查看两者的选项,而无需重定向到文件并拖尾它或其他东西(假设任一流都可以打印 ANSI 终端控制代码。)
有没有办法在新终端或类似的东西中打开现有进程的标准错误?
这是我的文件结构:
- someDirA
- folderOne
- folderTwo
- somefile.txt
- someotherfile.txt
- someDirB
- somefolder
Run Code Online (Sandbox Code Playgroud)
我希望 'someDirB' 看起来像:
- someDirB
- somefolder
- folderTwo
- somefile.txt
- someotherfile.txt
Run Code Online (Sandbox Code Playgroud)
我只想将 someDirA 的 folderTwo(文件夹及其所有内容)复制到 someDirB 中。两个目录都在不同的路径中。
我是新手bash和脚本。
我想写一个别名或脚本,这样每次我exit在命令行时,它都会记录我的命令历史。因为我尝试了很多新命令,而且我想回到文件中并对其进行评论,这样我可以更好地学习,而不仅仅是尝试命令然后完全忘记它们。
alias exit ="history > `date +%Y-%m-%d`.txt; exit"
Run Code Online (Sandbox Code Playgroud)
但是当我重新加载我的 bash 时,我得到:
-bash: alias: exit: not found
-bash: alias: =history > 2015-09-22.txt; exit: not found
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我应该尝试编写一个带有 while 循环的脚本吗?
shell ×10
linux ×7
bash ×6
command-line ×3
cp ×1
cpu ×1
debian ×1
script ×1
stdout ×1
terminal ×1
terminal.app ×1
virtualbox ×1
zsh ×1