Questions tagged «shell»

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

1
ssh如何运行命令?
我在客户端和服务器上都使用Bash。通过SSH运行命令时: ssh <host> 'declare' 给出了一个shell变量列表。 ssh <host> 'mount' 给出安装点列表。 但是,declare是Bash内置的,mount而是外部命令。如果服务器上有内置的Shell和具有相同名称的外部命令,SSH如何知道要运行哪个?
15 shell  ssh 



7
为什么echo和cat的执行时间会有这样的差异?
回答这个问题使我又问了一个问题: 我认为以下脚本可以做同样的事情,第二个脚本应该更快,因为第一个脚本cat需要一遍又一遍地打开文件,而第二个脚本仅可以打开文件一次然后回显一个变量: (请参阅更新部分以获取正确的代码。) 第一: #!/bin/sh for j in seq 10; do cat input done >> output 第二: #!/bin/sh i=`cat input` for j in seq 10; do echo $i done >> output 而输入约为50兆字节。 但是当我尝试第二个时,它太慢了,因为回显变量i是一个巨大的过程。第二个脚本也有一些问题,例如输出文件的大小比预期的要小。 我还检查了的手册页echo并cat进行比较: 回声-显示一行文本 cat-连接文件并在标准输出上打印 但是我没有区别。 所以: 为什么第二个脚本中的cat这么快而echo这么慢? 还是变量问题i?(因为在手册页中 echo据说它显示“一行文本”,所以我猜它仅针对短变量进行了优化,而不是针对非常长的变量进行了优化i。但是,这只是一个猜测。) 为什么使用时会出问题echo? 更新 我用seq 10而不是`seq 10`不正确。这是编辑的代码: 第一: #!/bin/sh for j …

3
“ sudo:来源:找不到命令”
$ source /etc/environment $ sudo source /etc/environment [sudo] password for t: sudo: source: command not found 似乎与bash要执行的外壳不同,source /etc/environment并且外壳没有source内置的外壳。 但是my和root的默认shell都是bash。 $ echo $SHELL /bin/bash 如果sudo确实使用了不同的外壳,为什么呢?我看到了slm的回复,但对我的情况不了解。
15 shell  sudo 

3
在shell脚本中表示布尔值的最佳实践是什么?
我知道,中有布尔值bash,但我从未在任何地方看到过它们。 我想为我的机器上一些经常查找的信息写一个包装,例如,是否插入/安装了此特定的USB驱动器。 实现该目标的最佳实践是什么? 弦吗? drive_xyz_available=true 一个数字(0代表真,≠0代表假)? drive_xyz_available=0 # evaluates to true 有功能吗? drive_xyz_available() { if available_magic; then return 0 else return 1 fi } 我最想知道的是,其他想要使用包装器的人会期望什么。他们期望布尔值,像变量这样的命令或要调用的函数吗? 从安全角度来看,我认为第二种选择是最安全的,但是我很想听听您的经验。


5
如何从shell变量中删除空格?
我已经在命令行完成了以下操作: $ text="name with space" $ echo $text name with space 我试图用来tr -d ' '删除空格,结果是: namewithspace 我已经尝试过一些方法,例如: text=echo $text | tr -d ' ' 到目前为止,还没有运气,希望您的好朋友能为您提供帮助!
15 shell  command-line  tr 

2
意外令牌'('附近的语法错误
当我在CentOS的SSH终端中使用以下代码时,它可以正常工作: paste <(printf "%s\n" "TOP") 但是,如果我将相同的行代码放置在shell脚本(test.sh)中并从终端运行shell脚本,它会引发错误 ./test.sh: line 30: syntax error near unexpected token (' ./test.sh: line 30: paste <(printf "%s\n" "TOP") 我该如何解决这个问题?
15 shell 

4
bash:adduser:在centOS上找不到命令
我最近在VMWare 8上安装了CentOS 5.5,并且试图在系统上添加新用户。除非使用su -选项,否则无法添加用户。我认为它必须在路径设置不正确的情况下执行某些操作。 我更新了路径,这是它的样子 /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/uone/bin:/sbin 我相信该命令位于/ sbin dir中,该目录已经是路径的一部分。谁能建议我可能还会缺少的东西?
15 shell  path 

2
pwd和/ bin / pwd之间的奇怪区别
我使用将符号链接添加到当前目录ln -s . aa。如果执行cd aa,然后执行pwd,响应为/home/sim/aa。 但是,如果执行/bin/pwd该命令,它将打印/home/sim(当前目录未更改)。 这种差异从何而来?
15 shell  symlink  pwd 

5
获取最新目录(不是最新文件)
我的文件夹parent包含以下内容: A.Folder B.Folder C.File 它既有文件夹又有文件。B.Folder较新。现在我只想得到B.Folder,如何实现呢?我试过了 ls -ltr ./parent | grep '^d' | tail -1 但这给了我drwxrwxr-x 2 user user 4096 Jun 13 10:53 B.Folder,但是我只需要名字B.Folder。
15 shell  files  ls  timestamps 

5
首先复制最小的文件?
我有一个很大的目录,其中包含我希望递归复制的子目录和文件。 有什么方法可以告诉cp它应该按文件大小顺序执行复制操作,以便最小的文件首先被复制?
15 shell  cp  file-copy  size 

5
当系统空闲时再次运行时运行命令
我想在用户变为非活动状态(系统处于空闲状态)时运行命令。例如: echo "You started to be inactive." 同样,当用户再次活动时(系统不再处于空闲状态): echo "You started to be active, again." 我需要一个可以执行此操作的shell脚本。没有计时器/间隔就可以吗?也许一些系统事件?
15 linux  bash  shell 

2
有没有办法在管道上使用xargs?
我正在尝试自动将移动到一个文件夹的flac文件转换为另一个文件夹中的mp3。 我当前的代码行是这样的: inotifywait -m -r -q -e moved_to --format "'%w%f'" ~/test | xargs -I x flac -cd x - | lame -b 320 - /media/1tb/x.mp3 为了解释到目前为止的工作方式,inotifywait递归地监视〜/ test到那里移动的文件,并将路径和文件名输出到管道。xargs使用该名称并创建正确的flac命令,将x替换为文件名并将文件解码到另一个管道。在新管道中,lame将flac的输出处理到/ media下的mp3中。我希望xargs以某种方式到达整个管道,在lame命令中替换x或以某种方式将其发送到两个命令都可以访问的变量。我试图弄乱命名管道和爵士乐,但是在两个命令之间通过管道传输实际数据这一事实使我费解了。
15 shell  pipe  xargs  inotify 

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.