我正在尝试将 RHEL5 中的默认 shell 从 zsh 更改为 bash。我尝试了这个thead 中提到的方法。通过键入sudo /usr/bin/chsh -s /bin/bash,系统会说sudo: /usr/bin/chsh: command not found。但是 /usr/bin/chsh 就在那里。我发现的另一种方法是用我的 usrid 编辑 /etc/passwd 文件,但它禁止我编辑它。有什么建议?
我在 linux 中有一个带有 bash shell 的 xterm。当我echo $PATH,它显示一个目录,我想知道谁把这个目录放在PATH. 我怎样才能知道?
谢谢!
我使用命令:
cm1 cm2 arg1 arg2 'argument 3'
Run Code Online (Sandbox Code Playgroud)
它首先转到cm1,然后重定向arg1 arg2 'argument 3'到另一个文件。
/usr/bin/cm1:#! /bin/bash
# some script here
shift
cm2 $@
Run Code Online (Sandbox Code Playgroud)
/usr/bin/cm2:echo $#
# This returns 4 in lieu of 3 because the white space in 'argument 3' causes the argument to be split into two arguments.
Run Code Online (Sandbox Code Playgroud)
那么,如何将参数从一个脚本传递到另一个脚本并确保不会将空格作为参数分隔符读取?
我正在尝试sync.sh为我们的网站创建一个与我们不太理想的版本控制相协调的脚本。此脚本会将数据库的实时副本迁移到我们的开发环境和其他一些东西。我在 mysql 迁移部分遇到了问题。
该脚本在开发机器上运行。 remote是现场主持人。
# --------------
# database
# ssh tunnel
ssh -L 3307:remote:3306 user@remote
# mysql dump
mysqldump -u someuser -h remote -P 3307 -p"p4ssw0rd" db > localfile.sql
# somehow close ssh tunnel ???
# populate local db with sql dump file
mysql -ulocal db < localfile.sql
# -----------------
# other sync stuff
# ...
Run Code Online (Sandbox Code Playgroud)
当我只运行脚本的 mysql 部分时,我得到了这个输出:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Enter password:
Run Code Online (Sandbox Code Playgroud)
我们已经设置了 ssh 密钥,我可以正确地 ssh …
理论上,如果我知道正在运行的 bash shell 的 pid,我可以运行一个 cat,它的 stdout 被重定向到该 shell 的 stdin。好像我在那个 shell 上输入了一些东西。不幸的是,将会有来自 cat 的流,但不会使 shell 正常运行(来自 cat 的输入命令不会被 bash 执行)。
打开终端:
ps -ef | grep bash
ymf 4906 4887 0 16:19 pts/0 00:00:00 /bin/bash
Run Code Online (Sandbox Code Playgroud)
在另一个终端上:
cat 1> /proc/4906/fd/0
echo 'hello!'
Run Code Online (Sandbox Code Playgroud)
为什么?
我如何编辑bash_profile?我试过使用该命令,chflags但它显示错误
[写错了。Bash_profile:不允许操作]
我使用的是 OS X Snow Leopard 10.6.8。
为什么不
find . -type f -exec echo $(file={}; echo ${file:0:5}) \;
Run Code Online (Sandbox Code Playgroud)
给出文件的前五个字符,而这有效:
find . -type f -exec bash -c 'echo ${1:0:5}' funcname {} \;
Run Code Online (Sandbox Code Playgroud)
背景:
我正在尝试将一棵充满图像的树批量转换为缩略图,并且我想通过在文件名末尾但在扩展名之前添加“_thumb”来动态重命名它们。对于一个文件,这个重命名过程很容易:
file='I am a picture.jpg'
mv \"$file\" \"${file%\.*}_thumb.${file##*\.}\"
Run Code Online (Sandbox Code Playgroud)
(第二行扩展为mv "I am a picture.jpg" "I am a picture_thumb.jpg")
但是当我尝试将此命令封装在-exec参数中时,find(1)我无法操作由find(示例简化)给出的文件名:
find . -type f -exec ${{}:0:5}) \;
Run Code Online (Sandbox Code Playgroud)
给
bash: ${{}:0:5}: bad substitution
Run Code Online (Sandbox Code Playgroud)
使用子shell我得到了进一步:
find . -type f -exec echo $(file={}; echo ${file:0:5}) \;
Run Code Online (Sandbox Code Playgroud)
这确实回显了文件名,但由于某种原因不执行字符串操作。
我终于在这篇 SO post …
在 Bash 中浏览最后一个命令的结果有点困难,因为命令提示符和结果是相同的颜色。这使得很难分离连续命令的结果。
例如,如何将颜色更改为粉红色?
我已经用 OCZ Vertex 3 SSD 替换了 2008 年末的一体式 MacBook(8 GB 内存,运行 OS X 10.7.4)的旧硬盘驱动器。这样做之后,我已经安装了 Lion 并从 Time Machine 备份中恢复了我的数据。
一切都很好,除了名为“bash”的进程永久使用大约 90% 的 CPU。
如果我通过活动监视器杀死它,一切都会恢复正常,但不幸的是,每次重新启动计算机时,该过程都会返回。
我试过zap the PRAM,从combo包重新安装10.7.4,甚至干脆等了2个多小时,问题依旧。
我有一个终端输出,我希望可供多个用户使用
目前类似:
command > /var/logs
Run Code Online (Sandbox Code Playgroud)
对于输入,以及:
watch tail -30 /var/logs
Run Code Online (Sandbox Code Playgroud)
对于输入端子。
然而,这是不可取的,因为只观察轮询而不是在有更新时输出,并且尾部不允许回滚。
bash ×10
linux ×3
macos ×2
unix ×2
arguments ×1
colors ×1
command-line ×1
find ×1
mysql ×1
path ×1
process ×1
redirection ×1
shell ×1
shell-script ×1
ssh ×1
ssh-tunnel ×1
stdout ×1
terminal ×1
zsh ×1