我有一个脚本,/home/username/scripts我想通过输入它的名字来执行它。
我知道我可以做 ' export PATH=$PATH:/home/username/scripts' 但我想有同样的效果,而不必每次都导出路径。例如,如果另一个用户想要一份脚本的副本,他们只需键入“scriptname.sh”而不是“./scriptname.sh”。
我可以使用 Bash 扩展的 glob 模式来实现逻辑“与”吗?假设我有一个jpg文件文件夹(以及其他文件),我想 rm除A.jpg和B.jpg之外的所有jpg文件。如果不尝试临时重新整理文件等技巧,我将如何做到这一点?我想总的主题是如何在 Bash 扩展 glob 中组合逻辑表达式和否定。
我将一个相当大的文件结构(> 100GB)下载到我的根目录的子文件夹中,我们称之为/folder. 问题是,我不小心将它复制到该文件夹的子文件夹中,而不是直接复制到该文件夹中,所以现在我拥有/folder/folder/*而不是/folder/*我想要的。有没有更好的方法来删除额外的级别,而不仅仅是:
# mv /folder/folder/* /folder
# rmdir /folder/folder
Run Code Online (Sandbox Code Playgroud) 我正在编写一个非常简单的脚本,但遇到了一些愚蠢的问题。基本上我有文本文件,其中每行由 3 个单词组成,由空格分隔。当您 cat 文件时,它会正确显示所有内容。例如 catting 文件看起来像这样:
bird dog mouse
ferret bunny hare
Run Code Online (Sandbox Code Playgroud)
我正在做一个简单的 for 循环,如下所示:
for line in $(cat pets.txt)
do
echo $line
"command $line"
done
Run Code Online (Sandbox Code Playgroud)
回声显示问题。该命令需要作为
command bird dog mouse
Run Code Online (Sandbox Code Playgroud)
相反,它正在运行
command bird
command dog
command mouse
Run Code Online (Sandbox Code Playgroud)
这似乎应该是一个简单的修复,但我无法正确使用我的搜索词来找到解决方案。
谢谢!
目前我有这个 find 命令,它避免了特定目录的下降:
find . \! \( -name ".hg" -prune \) \! \( -name "localhost" -prune \) \! \( -name "logs" -prune \) -type f
Run Code Online (Sandbox Code Playgroud)
该命令像我希望的那样工作,但我正在寻找更简洁的解决方案。我觉得我在重复自己很多,必须有一种更优雅/更短的方法来完成同样的事情。
我在 Arch Linux 笔记本电脑上运行 Minecraft 服务器。Minecraft 的服务器软件在命令行上作为交互式程序运行,因此我在分离的屏幕会话中启动它,允许我在每次需要访问它时重新附加。
为此,我使用了一个脚本(我其他时候不使用 screen,所以不用担心“grep SCREEN”)
#!/bin/bash
PID=ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
sudo screen -r $PID
Run Code Online (Sandbox Code Playgroud)
这将获得服务器正在运行的屏幕会话的 PID,然后重新附加到该屏幕。
现在我想知道,因为我在任何地方都找不到,是否可以使用单行来重定向输出
ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
Run Code Online (Sandbox Code Playgroud)
直接到 $argument 中
sudo screen -r $argument
Run Code Online (Sandbox Code Playgroud)
无需跨越 2 行
基本上我想将 awk 的标准输出重定向到屏幕的参数中,而不是作为屏幕的标准输入。
这似乎应该相对容易找到和执行,但是我在 Google 上很难找到有关它的任何信息。
任何帮助表示赞赏!谢谢
为什么下面的代码不起作用?
#!/bin/sh
PATH=$PWD/Info
defaults read $PATH
Run Code Online (Sandbox Code Playgroud)
每次我执行它我都会得到
./script: line 3: defaults: command not found
一旦我在一行中完成它就可以工作
defaults read $PWD/Info
Run Code Online (Sandbox Code Playgroud)
这样就好了。我只是好奇。
使用 gnome 2 可以通过执行从会话中注销
gnome-session-save --force-logout
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个 gnome-session-save 在 Gnome3 中不存在。有没有其他方法可以做到,或者我只是错过了一个数据包?
操作系统:安装了 gnome-core 的 Ubuntu 12.04。
我需要以“.pdf”或“.png”结尾的文件;这是我的尝试:
find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*[pdf|png]'
Run Code Online (Sandbox Code Playgroud)
这错误地包括以“Apdf”、“Zpdf”等结尾的文件(文件扩展名前缺少文字点)
我尝试将模式调整为:
find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.[pdf|png]'
Run Code Online (Sandbox Code Playgroud)
但随后不会返回任何结果。逃离 . 带反斜杠不起作用。为什么?
[0] $ uname -a
Darwin Robottinosino.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
Run Code Online (Sandbox Code Playgroud)
谢谢!
我很好奇当我 sudo 一个程序时是否有办法让我的 .bash_profile 工作。
例如,我将它设置为alias emerge='emerge -av'以便我可以安装软件,并且它总是会在下载和安装之前询问我是否要继续。但是我刚刚注意到当我sudo emerge foo,它默认只是普通命令emerge foo而不是emerge -av foo.
唯一想到解决这个问题的就是将别名也放在 root 的 .bash_profile 中,但我不想诉诸于那个,因为当我想向其中添加内容时,我总是必须在两个地方进行更改我自己的个人资料。
还有其他我不熟悉的方法吗?