如何在其他目录执行?
How to execute in other directory?
我有三个目录:
/home/Desktop/1
/home/Desktop/2
/home/Desktop/3
1、2目录下是可执行的C程序,在终端中可以这样执行./tst1
或./tst2
.
在目录 3 中,我有一个 bash 脚本,它从同一目录执行 C 程序 tst3.c。
我想在目录 3 中使用我的 bash 脚本从目录 1 和 2 执行这些 C 程序,如下所示
#!/bin/bash
sudo ./tst3
sleep 1
sudo ./tst1 # from directory 1
sleep 2
sudo ./tst2 # from directory 2
有什么想法吗?
如果您只是想查找脚本:
#!/bin/bash
base_dir="$( dirname "$( readlink -e "[=10=]" )" )"/..
sudo "$base_dir/3/tst3"
sleep 1
sudo "$base_dir/1/tst1"
sleep 2
sudo "$base_dir/2/tst2"
或
#!/bin/bash
cd "$( dirname "$( readlink -e "[=11=]" )" )"/..
sudo 3/tst3
sleep 1
sudo 1/tst1
sleep 2
sudo 2/tst2
如果您希望在执行 CWD 之前更改每个可执行文件的目录:
#!/bin/bash
cd "$( dirname "$( readlink -e "[=12=]" )" )"
sudo ./tst3
cd ../1
sleep 1
sudo ./tst1
cd ../2
sleep 2
sudo ./tst2
即使这些脚本是从其所在目录以外的目录启动的,它们也能正常工作。如果它们是通过符号链接启动的,它们甚至还能工作!
您有多种选择,至少包括:
设置 PATH 以包含找到您的命令的目录:
#!/bin/bash
export PATH="$PATH:/home/Desktop/1:/home/Desktop/2:/home/Desktop/3"
sudo tst3 # from directory 3
sleep 1
sudo tst1 # from directory 1
sleep 2
sudo tst2 # from directory 2
使用命令的绝对路径:
#!/bin/bash
sudo /home/Desktop/3/tst3 # from directory 3
sleep 1
sudo /home/Desktop/1/tst1 # from directory 1
sleep 2
sudo /home/Desktop/2/tst2 # from directory 2
使用命令的相对路径:
#!/bin/bash
sudo ../3/tst3 # from directory 3
sleep 1
sudo ../1/tst1 # from directory 1
sleep 2
sudo ../2/tst2 # from directory 2
它们对称地处理目录。另一种方法是将命令放在您的 PATH 中已有的目录中(例如 $HOME/bin
,也许),然后 运行 它们没有任何路径。这是我通常会做的 — 确保要 运行 的命令位于我的 PATH 上的目录中。
我有三个目录:
/home/Desktop/1
/home/Desktop/2
/home/Desktop/3
1、2目录下是可执行的C程序,在终端中可以这样执行./tst1
或./tst2
.
在目录 3 中,我有一个 bash 脚本,它从同一目录执行 C 程序 tst3.c。
我想在目录 3 中使用我的 bash 脚本从目录 1 和 2 执行这些 C 程序,如下所示
#!/bin/bash
sudo ./tst3
sleep 1
sudo ./tst1 # from directory 1
sleep 2
sudo ./tst2 # from directory 2
有什么想法吗?
如果您只是想查找脚本:
#!/bin/bash
base_dir="$( dirname "$( readlink -e "[=10=]" )" )"/..
sudo "$base_dir/3/tst3"
sleep 1
sudo "$base_dir/1/tst1"
sleep 2
sudo "$base_dir/2/tst2"
或
#!/bin/bash
cd "$( dirname "$( readlink -e "[=11=]" )" )"/..
sudo 3/tst3
sleep 1
sudo 1/tst1
sleep 2
sudo 2/tst2
如果您希望在执行 CWD 之前更改每个可执行文件的目录:
#!/bin/bash
cd "$( dirname "$( readlink -e "[=12=]" )" )"
sudo ./tst3
cd ../1
sleep 1
sudo ./tst1
cd ../2
sleep 2
sudo ./tst2
即使这些脚本是从其所在目录以外的目录启动的,它们也能正常工作。如果它们是通过符号链接启动的,它们甚至还能工作!
您有多种选择,至少包括:
设置 PATH 以包含找到您的命令的目录:
#!/bin/bash export PATH="$PATH:/home/Desktop/1:/home/Desktop/2:/home/Desktop/3" sudo tst3 # from directory 3 sleep 1 sudo tst1 # from directory 1 sleep 2 sudo tst2 # from directory 2
使用命令的绝对路径:
#!/bin/bash sudo /home/Desktop/3/tst3 # from directory 3 sleep 1 sudo /home/Desktop/1/tst1 # from directory 1 sleep 2 sudo /home/Desktop/2/tst2 # from directory 2
使用命令的相对路径:
#!/bin/bash sudo ../3/tst3 # from directory 3 sleep 1 sudo ../1/tst1 # from directory 1 sleep 2 sudo ../2/tst2 # from directory 2
它们对称地处理目录。另一种方法是将命令放在您的 PATH 中已有的目录中(例如 $HOME/bin
,也许),然后 运行 它们没有任何路径。这是我通常会做的 — 确保要 运行 的命令位于我的 PATH 上的目录中。