Articles of shell

Linux Shell编程cp命令

我在linux上编写一个简单的shell程序。我在shell中实现了许多用户给出的命令。 但我不知道如何给命令写这个命令。我的意思是当用户给出一个简单的命令,即ls or date我只是写在我的shell systtem("ls") 。 我比较了string(由用户给出)与ls的值,如果它是真的。 例如 string s; cin>>s; if(s=="ls") system("ls"); 现在如果用户说什么cp file1.cpp file2.cpp我应该怎么做呢? 提前致谢。

如何将从linux命令生成的stringinput到variables?

编码linux shell脚本时遇到一些小问题。 我的代码如下所示,我正在努力将我的修改过的string名称input到名为“fileName”的variables中,如下所示。 然后,我命令回声确定以前的代码运行良好。 但是,它什么都不输出。 如何解决这个问题? for file in ./*.txt do fileName=$file | rev | cut -d. -f2 | rev echo {$fileName} done 正如我所说,echo {$ fileName}没有输出我想要提取的单词。 我期待你的有益的build议:)

在Linux中find会话负责人或进程组的控制TTY的方法是什么?

这不是一个语言特定的问题,虽然我现在正在使用golang。 我正在编写一个命令行程序,我想find程序的真实UID(realUID,我的意思是,如果用户做了一个sudo,那么有效的uid会改变,但是真正的uid将和用户的。) 我读过,发现控制tty的所有者是find这个的一种方法,在linux上,我们可以使用“tty”命令,它将返回连接到STDINPUT的terminal的文件名。 检查它的所有权是一种方法。 另一种方法是find会议领导者进程,以及谁拥有它。 我尝试了第一种方式,使用 cmdOut []byte cmdOut, _ = exec.Command("tty").Output() 但是当我从我的shell运行程序时,它返回的输出not a tty 。 机会是,这可能会得到执行在一个单独的分支shell从tty分离(再次,只是一个疯狂的猜测)。 我尝试了使用os.Getppid()来获得父pid的第二种方式,但实际上,在运行sudo的时候,它又分叉了,它给出了sudo进程的父pid( 16031在下面的例子中,而我想抓住3393 )。 (从pstree输出粘贴进程层次结构) /usr/bin/termin(3383)-+-bash(3393)—sudo(16031)—Myprogram(16032) ,所以我无法获得会话领导过程,但只是父母的PID。 有人可以指导我如何使用这种方法来实现此function?

C ++在shell中执行许多命令

我有一个C ++程序,我想在shell中执行多个命令。 我目前的解决scheme使用system()函数,如下所示: return_value = system(SETUP_ENVIRONMENT; RUN_USEFUL_APP_1); … do_something_else … return_value = system(SETUP_ENVIRONMENT; RUN_USEFUL_APP_2); … do_something_else … return_value = system(SETUP_ENVIRONMENT; RUN_USEFUL_APP_3); … 它工作,但SETUP_ENVIRONMENT需要几秒钟,使程序真的很慢。 但是我必须每次都运行它,因为system()每次都在一个新的shell中运行。 我希望能够设置一次我的shell,然后运行其中的所有命令。 execute_in_shell(SETUP_ENVIRONMENT); return_value = execute_in_shell(RUN_USEFUL_APP_1); … do_something_else … return_value = execute_in_shell(RUN_USEFUL_APP_2); … do_something_else … return_value = execute_in_shell(RUN_USEFUL_APP_3); … 我怎么做? 我在Linux上。

redis-cli使用模式执行ttl命令

我想从redis-cli shell中一次显示我在Redis中拥有的所有密钥的ttl。 我尝试了类似的东西 redis-cli keys * | xargs redis-cli TTL 但它不工作,我不断收到错误: (error) ERR wrong number of arguments for 'ttl' command

混淆bash行为 – Bash / awk之谜

为什么我在使用Bash shell的时候得到这个输出? 我不明白,因为如果我直接运行命令我总是得到相同的input(“:0”) oneUser $ w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}' :0 oneUser $ w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}' :0 oneUser $ w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}' :0 但是之后: oneUser $ TEST=$(w -h oneUser | […]

Bash脚本重命名一堆文件夹

我有一个目录,看起来有点像这样: drw-r–r– 1 root root 0 Jan 24 17:26 -=1=-directoryname drw-r–r– 1 root root 0 Jan 24 17:26 -=2=-directoryname drw-r–r– 1 root root 0 Jan 24 17:26 -=3=-directoryname drw-r–r– 1 root root 0 Jan 24 17:26 -=4=-directoryname drw-r–r– 1 root root 0 Jan 24 17:26 -=5=-directoryname 我试图写一个脚本来改变这些文件夹从-=1=- Folder#1剥离“ -=1=- ”部分,但唉,我没有运气。 任何人都可以帮我find解决办法吗? 到目前为止我的脚本已经失败了我。 #!/bin/bash for i […]

如何在Linux中实现镜像副本?

我想使两个目录同步。 我知道在Windows中有一个robocopy /MIR命令可以实现这一点。 例如: robocopy D:\test1 E:\Backup /MIR 当更新或删除文件时,备份目录可以保持同步。 我已经尝试在Linux通过rsync命令是这样的: rsync -a /usr/test /usr/backup 但是当我删除/usr/test下的一个文件然后运行这个命令时,被删除的文件仍然存在于/backup/test – 两个目录不能保持不同步。 那么,怎样才能在Linux中实现两个目录的同步呢?

在Linux中recursion地添加bash脚本作为命令?

一般来说,我对Bash和Linux相当陌生。 我已经创build了一些我希望能够通过键入命令而不是目录和可执行文件来使用的脚本。 如果这有所作为,我正在使用Debian Jessie。 其中一个脚本的path是~/Scripts/DIR_1/My_Script.sh而另一个~Scripts/DIR_2/My_Other_Script.sh在~Scripts/DIR_2/My_Other_Script.sh 。 我希望Scripts目录中包含的所有Scripts都被编入索引,而不pipe目录/path深度如何。 我已经将这个文本附加到我的.bashrc文件的末尾… PATH=${PATH}:$(find ~/Scripts -type d | sed '/\/\\./d' | tr '\n' ':' | sed 's/:$//') 因为我对这种事情很陌生,所以我不得不从这里偷走那条线。 当我尝试从我的主文件夹(或任何其他地方)的子目录命令行运行My_Script ,我得到My_Script: command not found 我会承认,我可能误解了在命令行中添加bash脚本的过程。 如何recursion地添加bash脚本作为命令? 我目前使用的stream程有什么问题?

bash – 使用intvariables作为引用传递给函数的位置参数的索引

我想使用一个variables作为索引值来引用传递给脚本的位置variables,例如: x=101 y=201 z=301 foo(){ i=0; (( i+=1 )); # i=1 echo "${$i}"; # parameter 1 (( i+=1 )); # i=2 echo "${$i}"; # parameter 2 (( i+=1 )); # i=3 echo "${$i}"; # parameter 3 } foo xyz 输出: 101 201 301 数组和循环在这种情况下不起作用,我需要一个递增intvariables的简单方法,并使用这个值作为索引来检索传递的方法参数。 build议吗?