Remix.run Logo
b-kf an hour ago

Exactly

  #!/usr/bin/tcc -run
  
  #include <stdio.h>
  
  int main(int argc, char **argv)
  {
      printf("Hello from C!\n");
  
      for (int i = 1; i < argc; ++i)
          printf("argument %d: %s\n", i, argv[i]);
  
      return 0;
  }
And ready is your cscript :)

  $ chmod u+x cscript && ./cscript hello world
  Hello from C!
  argument 1: hello
  argument 2: world
(I can't even articulate why I love it so much that this works)
xixixao an hour ago | parent [-]

Can you change the current working directory? If not, it's not a shell script.

b-kf 7 minutes ago | parent | next [-]

Obviously it's not a shell script, it's still C. It's fun though and being able to freely specify an interpreter/execution path using a shebang has led me to write some useful little command line utilities in unlikely programming languages over the years. That said, not sure why changing the working directory would be the litmus test. A C program can change its own working directory just as easily as an ordinarily executed bash script?

  $ cat bscript.sh && echo "---" && ./bscript.sh 
  #!/usr/bin/bash
  cd testdir/
  ls
  ---
  dummyfile
in C you can change dir easily via `chdir()`[1]

  $ cat cscript && echo "---" && ./cscript 
  #!/usr/bin/tcc -run
    
  #include <stdio.h>
  #include <stdlib.h>
  #include <unistd.h>
    
  int main(void)
  {
      if (chdir("testdir") == -1) {
          perror("chdir");
          return EXIT_FAILURE;
      }
    
      execlp("ls", "ls", (char *)NULL);
      perror("execlp");
      return EXIT_FAILURE;
  }
  ---
  dummyfile
[1] https://www.man7.org/linux/man-pages/man2/chdir.2.html

If you meant somehow changing the parent shell's directory an ordinary bash script doesn't do that either

zbentley 6 minutes ago | parent | prev [-]

Presumably you can call chdir(2) from the C code?

Or did you mean change the directory of the calling shell (in which case, executable shell scripts written in Bash and friends can’t do that either).