如何在其他目录执行?

How to execute in other directory?

我有三个目录:

  1. /home/Desktop/1
  2. /home/Desktop/2
  3. /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

即使这些脚本是从其所在目录以外的目录启动的,它们也能正常工作。如果它们是通过符号链接启动的,它们甚至还能工作!

您有多种选择,至少包括:

  1. 设置 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
    
  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
    
  3. 使用命令的相对路径:

    #!/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 上的目录中。